Надежна ли строка :: сравнение для определения алфавитного порядка? - PullRequest
8 голосов
/ 06 декабря 2009

Проще говоря, если входные данные всегда находятся в одном и том же регистре (здесь, в нижнем регистре) и если символы всегда ASCII, можно ли использовать строку :: сравнить, чтобы надежно определить алфавитный порядок двух строк?

Таким образом, при stringA.compare(stringB), если результат равен 0, они одинаковы, если он отрицательный, строка A идет перед строкой B в алфавитном порядке, а если она положительная, строка A идет после?

Ответы [ 5 ]

8 голосов
/ 06 декабря 2009

Согласно документам на cplusplus.com,

Функция-член возвращает 0, если все персонажи в сравнении содержимое сравнить равно, отрицательный значение, если первый символ, который делает не соответствует по сравнению с меньшим в объект, чем в строке сравнения, и положительное значение в противоположном случай.

Таким образом, он будет сортировать строки в порядке ASCII, который будет алфавитным для английских строк (без диакритических знаков или других расширенных символов) того же случая.

3 голосов
/ 06 декабря 2009

Да, если все символы в обеих строках имеют одинаковый регистр, и если обе строки состоят только из букв, это будет работать.

compare - это функция-член, поэтому вы бы назвали ее так:

stringA.compare(stringB);
2 голосов
/ 06 декабря 2009

В C ++ string - это экземпляр класса шаблона basic_string с параметрами по умолчанию: basic_string<char, char_traits<char>, allocator<char> >. Функция сравнения в шаблоне basic_string будет использовать функцию char_traits<TChar>::compare для определения значения результата.

Для std::string порядок будет такой же, как у кода по умолчанию для реализации (компилятор), и обычно это порядок ASCII. Если вам требуется другой порядок (скажем, вы хотите считать {a, á, à, â} эквивалентным), вы можете создать экземпляр basic_string с собственной реализацией char_traits<>. предоставление другого compare указателя на функцию.

0 голосов
/ 06 декабря 2009

Спецификации для языка C и C ++ гарантируют лексическое упорядочение, 'A' <'B' <'C' ... <'Z'. То же самое верно для строчных букв. </p>

Порядок для текстовых цифр также гарантирован: «0»

При работе с несколькими языками многие люди создают массив символов. В массиве ищется символ. Вместо сравнения символов сравниваются индексы.

0 голосов
/ 06 декабря 2009

да

Функция-член возвращает 0, если все персонажи в сравнении содержимое сравнить равно, отрицательный значение, если первый символ, который делает не соответствует по сравнению с меньшим в объект, чем в строке сравнения, и положительное значение в противоположном случай.

Для строковых объектов результат сравнение персонажей зависит только от его символьный код (т. е. его ASCII код ), поэтому результат имеет некоторые ограниченные алфавитный или числовой порядок то есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...