Сравнение строк и упорядочивание по алфавиту
Определить, какая из них идет раньше по алфавиту, если банан и бананы, то первая идет раньше.
Как проще всего?
Добавлено через 4 минуты
С больших букв тоже раньше, предположим что все символы в строке — буквы одного языка
Добавлено через 21 минуту
Все, разобрался, метод CompareTo() ничего не выдумывая
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Упорядочивание строк в матрице
Помогите пожалуйста с этим заданием. Уже неделю пытаюсь написать, вообще не получается. Дана.
Сортировка строк по алфавиту
Не могу понять почему не происходит сортировка по алфавиту все данные вводятся вручную в консоле .
Сортировка строк по алфавиту
Есть массив строк(на англ.), нужно его отсортировать по алфавиту. Не интересует готовый метод Sort.
Лексикографическое сравнение. Сортировка строк по алфавиту
Как отсортировать двумерный массив в лексикографическом порядке в меньшую сторону. (Строки содержат.
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 для сравнения строк используют следующие операторы:
- оператор < , «меньше»;
- оператор
- оператор == , «равно»;
- оператор != , «не равно»;
- оператор > , «больше»;
- оператор >= , «больше или равно».
Использование оператора «больше/меньше»
Ниже вы увидите простейший пример сравнения строк в 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