Как сравнивать слова по алфавиту
Перейти к содержимому

Как сравнивать слова по алфавиту

  • автор:

Сравнение строк и упорядочивание по алфавиту

Определить, какая из них идет раньше по алфавиту, если банан и бананы, то первая идет раньше.

Как проще всего?

Добавлено через 4 минуты
С больших букв тоже раньше, предположим что все символы в строке — буквы одного языка

Добавлено через 21 минуту
Все, разобрался, метод CompareTo() ничего не выдумывая

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Упорядочивание строк в матрице
Помогите пожалуйста с этим заданием. Уже неделю пытаюсь написать, вообще не получается. Дана.

Сортировка строк по алфавиту
Не могу понять почему не происходит сортировка по алфавиту все данные вводятся вручную в консоле .

Сортировка строк по алфавиту
Есть массив строк(на англ.), нужно его отсортировать по алфавиту. Не интересует готовый метод Sort.

Лексикографическое сравнение. Сортировка строк по алфавиту
Как отсортировать двумерный массив в лексикографическом порядке в меньшую сторону. (Строки содержат.

Эксперт .NET

17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,087

Лучший ответ

Сообщение было отмечено как решение

Решение

Вдруг кому-то будет интересно:
Если нужно упорядочивание по алфавиту, то используется метод CompareTo (АаБбВвГгДд. ).
Если нужно упорядочивание по порядковому номеру символа в таблице кодировки, то CompareOrdinal (АБВГДабвгд. )

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

упорядочивание по алфавиту
как элементы структуры типа char упорядочить по алфавиту? О_о

Неправильное упорядочивание по алфавиту
Не могу отсортировать по алфавиту, поля заполняла через свой интерфейс, т.е. кодировка у всех одна.

Подпрограмма выполняющая упорядочивание слов по алфавиту
Записать подпрограмму, которая выполняет упорядочивание слов по алфавиту в каждом предложении.

Упорядочивание строк
"ввести 10 имен, вывести их на экран в алфавитном порядке." Меня интересует как это записать в.

Сравнение строки по алфавиту

Здравствуйте, подскажите пожалуйста как сравнить строку по алфавиту? То есть мне нужно что бы каждая буква проверялась на указаный алфавит.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#include #include #include using namespace std; int main(){ char string[255]; char HEX[22] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F' }; int DEC[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int OCT[8] = { 0, 1, 2, 3, 4, 5, 6, 7 }; int BIN[2] = { 0, 1 }; int stringLength; cout  "Input your string: "; cin >> string; stringLength = strlen(string); for (int i = 0; i  stringLength; i++){ if (strcmp(string, HEX) == 0){ //strchr cout  "number"; } else { cout  "not a number"; } } _getch(); }

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

Ответы с готовыми решениями:

Лексикографическое сравнение. Сортировка строк по алфавиту
Как отсортировать двумерный массив в лексикографическом порядке в меньшую сторону. (Строки содержат.

Строки. Вывести на печать то слово этой строки, которое по алфавиту предшествует всем другим
Дана строка из 20 различных слов (словом считается любой набор букв, за которым следует пробел).

Сортировка строки по алфавиту
Здравствуйте, нужно отсортировать строку по алфавиту. Подскажите, как это реализовать? Есть массив.

Осортировать строки по алфавиту
После ввода с клавиатуры строками некоторых фамилий и рядом с ними возраста (год рождения).

Как сравнить строки в Python? Операторы сравнения строк

Строка в Python представляет собой набор символов, находящихся в кавычках. При этом сравнение строк отличается от сравнения чисел и имеет свои особенности. В этой статье мы кратко и простым языком расскажем о сравнении строк в Python и посмотрим, какие операторы для этого есть, и как эти операторы используются.

Основные операторы сравнения в Python

Итак, в языке программирования Python для сравнения строк используют следующие операторы:

  • оператор < , «меньше»;
  • оператор
  • оператор == , «равно»;
  • оператор != , «не равно»;
  • оператор > , «больше»;
  • оператор >= , «больше или равно».

1-20219-07963f.png

Использование оператора «больше/меньше»

Ниже вы увидите простейший пример сравнения строк в Python с помощью соответствующих операторов: > и < . Давайте сравним строки со словами banana и apple:

 
print("apple" > "banana") False print("apple" < "banana") True

Так как буква «a» находится перед «b», слово apple будет находиться перед словом banana, что логично (то есть banana больше, чем apple). Однако всё сложнее, чем может показаться на первый взгляд. Давайте для наглядности сравним, равны ли слова Apple и apple:

 
print("apple" == "Apple") False print("apple" > "Apple") True

Мы увидим отсутствие равенства, а всё потому, что в Python одинаковые буквы, имеющие разный регистр, считаются разными символами, и компьютер их различает по присвоенным им уникальным значениям.

Что касается нашей ситуации, то здесь латинская «А» имеет значение 65, в то время как значение строчной «а» равно 97.

Кстати, если хотите узнать уникальное значение какого-нибудь символа, используйте функцию ord:

 
print(ord("A")) 65

При сравнении символов или строк, Python конвертирует символы в их соответствующие порядковые значения, после чего сравнивает слева направо.

Существует функция chr, преобразовывающая порядковое значение в символ. Пример:

 
print(chr(1040)) А

Например, кириллическая А соответствует значению 1040. Есть свои значения у цифр, а также вспомогательных знаков, включая «?», «=», пробел.

В принципе, вы всегда можете выполнить сравнение строк в Python, предварительно конвертировав строки в один формат, к примеру, в нижний регистр (используем метод lower ):

 
str1 = "apple" str2 = "Apple" str2.lower() print(str1 == str1) True

Применение оператора «равенство»

Мы можем проверить, равны ли строки, посредством оператора == :

 
print("строка1" == "строка2") False

Естественно, строки не являются равными, т. к. выполняется точное сравнение в Python. Неравными будут и те строки, которые содержат одинаковые, но переставленные местами символы. В последнем случае есть выход: превратить нашу строку в список, отсортировать, сравнить и вывести содержимое:

 
strA = "abcde" strB = "abdec" print(sorted(list(strA)) == sorted(list(strB))) print(sorted(list(strA))) print(sorted(list(strB))) True ['a', 'b', 'c', 'd', 'e'] ['a', 'b', 'c', 'd', 'e']

Использование оператора «не равно»

Оператор != выполняет проверку неравенства:

 
print("abc" != "zxc") True

Разумеется, результат True, ведь abc не равно zxc.

Применение операторов «больше или равно/меньше или равно»

 
print("abc" 

В нашем случае «abc» меньше.

Аналогично работает и оператор >= :

 
print("abc" >= "abc") True

В этой ситуации очевидно, что строки равны.

Как сравнивать слова по алфавиту

К строкам в языке С++ можно применять операции сравнения.

Эти операции сравнивают два объекта string, либо объект string со строковым литералом. Во всех операцияъ операнды сравниваются посимвольно до тех пор, пока не будет найдена пара соответствующих символов, которые содержат разные символы, или пока не будет достигнут конец одного или обоих операндов. Когда пара символов различается, с помощью сравнение числовых кодов символов определяется, какая строка условно "меньше" или "больше". Если разные пары символов не найдены, но строки имеют разную длину, более короткая строка «меньше» более длинной строки. Две строки равны, если они содержат одинаковое количество символы и все соответствующие коды символов равны. Подобный способ сравнения еще называется лексикографическим сравнением или сравнением в лексикографическом порядке. При этом стоит отметить, что поскольку сравниваются числовые коды символов, результат сравнения также зависит от регистра символов.

Например, оператор == возвращает true, если все символы обеих строк равны.

std::string s1 ; bool result ; // false - строки различаются по регистру result = s1 == "hello"; // true

Поскольку строки "hello" и "Hello" отличаются по регистру первой буквы, соответственно отличается и числовой код символа, поэтому эти строки не равны.

Другой пример - операция > (больше):

std::string s1 ; std::string s2 ; bool result s2>; // true

В данном случае условие s1 > s2 верно, то есть s1 больше чем s2, так как при равенстве первых трех символов ("hel") третий символ первой строки ("m") стоит в алфавите после четвертого символа второй строки ("l"), то есть "m" больше чем "l" (несмотря на то, что по количеству символов "hello" больше чем "helm").

Возьмем небольшую программу. Например, у нас есть массив имен, и нам надо отсортировать их в алфавитном порядке:

#include #include int main() < std::string people[] ; // сортируем по возрастанию bool sorted <>; do < sorted = true; // остается true, если строки отсортированы std::string temp; // переменная для обмена значениями for (unsigned i ; i < std::size(people); i++) < // если предыдущая строка больше последующей if (people[i-1] >people[i]) < // обмениваем значения temp = people[i]; people[i] = people[i-1]; people[i-1] = temp; sorted = false; >> > while (!sorted); // вывод строк на консоль for (const auto person: people) < std::cout >

Здесь для сортировки массива строк применяется не самая быстрая, но наглядная сортировка пузырьком, которая сравнивает предыдущую строку с последующей. Если предыдущая "больше" последующей, то через промежуточную переменную temp обмениваем значения. Чтобы оптимизировать сортировку, добавлена переменная sorted . Каждый раз, когда производится обмен значениями, эта переменная сбрасывается в false. А это значит, что нам надо заново запустить внешний цикл do-while .

Alice Bob Kate Sam Tom
Функция compare()

Для сравнения строк у строки также можно вызвать функцию compare() . В нее передается другая строка, с которой сравнивается текущая. Функция compare возвращает 0, если две строки равны. Если текущая строка больше, то возвращается число больше 0. Если текущая строка меньше, то возвращается число менише 0. Например:

std::string tom ; std::string person; int result = tom.compare(person); std::cout 

Здесь две строки равны, поэтому возвращается число 0.

std::string tom ; std::string bob; std::string sam ; int result = sam.compare(bob); // 1 - первая строка (sam) больше второй (bob) std::cout 

Здесь строка "Sam" больше строки "Bob", поэтому результатом первого сравнения будет число 1. А во втором сравнении первая строка "Sam" будет меньше второй строки "Tom", соответственно функция возвратить -1.

Функция compare() имеет ряд версий. Отметим одну из них, которая принимает три параметра:

int compare(size_t _Off, size_t _Nx, const std::string &_Right) const

Первый параметр представляет индекс первого символа в текущей строке, начиная с которого начинается подстрока. Второй параметр - количество символов подстроки. Третий параметр - строка, которая сравнивается подстрока. То есть сравниваем строку из третьего параметра с подстрокой, которая начинается с индекса в первом параметре и имеет количество символов, указанных во втором параметре.

Где мы это можем применить? Например, нам надо узнать индекс, с которого встречается одна строка в другой:

#include #include int main() < std::string text ; std::string word ; for (unsigned i<>; i < text.length() - word.length() + 1; i++) < if (text.compare(i, word.length(), word) == 0) < std::cout > >

В данном случае мы пытаемся найти индекс строки word ("world") в строке text ("Hello world!"). Для этого в цикле проходим по символам из строки text, пока не дойдем до символа с индексом text.length() - word.length() + 1 (так как сравниваем word.length() символов, поэтому вычитаем word.length(). И так как строки могут быть равны, добавляем 1)

В цикле выполняем сравнение

if (text.compare(i, word.length(), word) == 0)

то есть в строке text сравниваем подстроку, которая начинается с индекса i и имеет word.length() символов с строкой word. Если для какого то числа i мы смогли найти подобное равенство, то выводим число i на консоль. И в данном случае консоль отобразит следующее

text contains world at index 6

Еще одна форма функции compare() позволяет сравнивать две подстроки:

#include #include int main() < std::string text ; std::string word ; unsigned size ; // число сравниваемых символов из второй строки for (unsigned i<>; i < text.length() - size + 1; i++) < if (text.compare(i, size, word, 1, size) == 0) < std::cout > >

Здесь в принципе тот же алгоритм, что и с предыдущем примере. Только теперь сравниваем из строки word подстроку размером size, которая начинаяется с индекса 1 (то есть подстрока "or"), с подстрокой из строки text. И в данном случае консольный вывод будет следующим

text contains substring at index 7

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *