299 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,265
|
|
1 | |
Как происходит сравнение строк?23.12.2018, 16:20. Показов 38665. Ответов 7
Метки нет (Все метки)
подскажите пожалуйста, как сравниваются строки в плюсах? что там при этом происходит? сравниваются количество символов в строке? то есть где их больше , та и строка больше, или символы сравниваются по ascii? по их кодам?
0
|
23.12.2018, 16:20 | |
Ответы с готовыми решениями:
7
Как реализовать сравнение строк? Как произвести сравнение строк? Сравнение строк как регулярные выражения Как реализовать сравнение строк с русскими символами |
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
23.12.2018, 17:00 | 2 |
По порядку, от начала строки сравниваются коды символов.
s1 < s2, если при первом несовпадении символов c1 < c2; s1 == s2, если все символы совпадают; s1 > s2, если при первом несовпадении символов c1 > c2; Если все символы совпадают, но одна из строк закончилась, то больше та строка, в которой символов больше. Принцип хорошо описан для функции strcmp(), при сравнении string все точно так же.
1
|
299 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,265
|
|
23.12.2018, 18:36 [ТС] | 3 |
да вы не хуже объяснили,чем описано в strcmp
только вот не пойму один момент: если строка -это массив символов типа char ,то как же этот массив сравнивается с другим массивом то есть с другой строкой? это же не паскаль где можно сравнить два массива просто и без цикла вобщем вопрос, как сравниваются эти элементы массива без цикла?
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
23.12.2018, 18:50 | 4 | |||||
Массив символов и строка - две разные вещи. У C-string в конце находится '\0' - символ конца строки. В массиве символов это требование может и не выполняться. Без цикла наверное никак не сравнить. Предположу, что и в паскале сравнение строк где-то в глубине реализации разворачивается в цикл. Экземпляры класса string сравниваются операторами сравнения (
< | > | <= | >= | == | != ). C-string сравнить с помощью операторов сравнения не получится, для этого и есть strcmp().
1
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
23.12.2018, 18:52 | 5 |
pcmax, в Си как такового стандартного типа данных string не было, а был массив char с нулем в конце. Для сравнения строк, в стандартной библиотеке Си написали функцию strcmp в которую передаются два указателя на char
от строк которые будут сравниваться, функция проводит лексикографическое сравнение посимвольно в цикле. В С++ совсем обленились и придумали классы. Написали класс string, почесали репу и подумали, что не хотят каждый раз использовать функцию strcmp, а хотят использовать такую фичу C++ как перегрузку операторов. В частности оператора "==". Внутри этой перегрузки и написали strcmp. В этом и заключается принцип языков высокого уровня, если разматывать в низкую сторону, то там на самом деле тот самый цикл сравнивающий посимвольно строки, только обернутый в сто шуб, чтобы программисту удобнее было)
1
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
23.12.2018, 18:59 | 6 |
1
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
23.12.2018, 19:15 | 7 |
valen10, Ну, в целом сравнивает по значению символа в таблице кодировки. Но если я не ошибаюсь, алфавит в этой таблице лежит в лексикографическом порядке.
1
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
23.12.2018, 19:20 | 8 |
Похоже, что не всегда. Национальная ASCII (Windows-1251) буквы Ёё хранит где-то в стороне от остального алфавита. Поэтому и решил уточнить.
1
|
23.12.2018, 19:20 | |
23.12.2018, 19:20 | |
Помогаю со студенческими работами здесь
8
Строка: Подскажите, пожалуйста, как можно реализовать сравнение строк? Как происходит сравнение строк? Интерфейс IComparable - как в программе происходит сравнение по health Как происходит сравнение с помощью операторов LSS, LEQ, GTR, GEQ ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |