strcoll
Определено в заголовке <string.h> |
||
|---|---|---|
int strcoll( const char* lhs, const char* rhs ); |
Сравнивает две строковые литералы с нулевым завершением в соответствии с текущим языковым стандартом, определённым категорией LC_COLLATE.
Параметры
| lhs, rhs | - | указатели на нуль-терминированные строковые литералы для сравнения |
Возвращаемое значение
- Отрицательное значение, если
lhsявляется меньше (предшествует)rhs. -
0, еслиlhsравноrhs. - Положительное значение, если
lhsявляется больше (следует за)rhs.
Примечания
Порядок сортировки — лексикографический: позиция буквы в национальном алфавите (ее эквивалентный класс) имеет более высокий приоритет, чем ее регистр или вариант. В пределах эквивалентного класса строчные символы предшествуют строчным эквивалентам, и для символов с диакритическими знаками может применяться порядок, зависящий от языка. В некоторых языковых стандартах группы символов сравниваются как единицы сортировки. Например, "ch" в чешском языке следует за "h" и предшествует "i", а "dzs" в венгерском языке следует за "dz" и предшествует "g".
Пример
#include <locale.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
setlocale(LC_COLLATE, "cs_CZ.utf8");
// Alternatively, ISO-8859-2 (a.k.a. Latin-2)
// may also work on some OS:
// setlocale(LC_COLLATE, "cs_CZ.iso88592");
const char* s1 = "hrnec";
const char* s2 = "chrt";
printf("In the Czech locale: ");
if (strcoll(s1, s2) < 0)
printf("%s before %s\n", s1, s2);
else
printf("%s before %s\n", s2, s1);
printf("In lexicographical comparison: ");
if (strcmp(s1, s2) < 0)
printf("%s before %s\n", s1, s2);
else
printf("%s before %s\n", s2, s1);
}Вывод:
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
Ссылки
- Стандарт C23 (ISO/IEC 9899:2023):
- 7.24.4.3 Функция strcoll (п: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.24.4.3 Функция strcoll (п: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.24.4.3 Функция strcoll (п: 366)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.21.4.3 Функция strcoll (п: 329)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.11.4.3 Функция strcoll
См. также
|
(C95) |
сравнивает две широкие строки в соответствии с текущим языковым стандартом (функция) |
| преобразует строку таким образом, что strcmp даст тот же результат, что и strcoll (функция) |
|
|
(C95) |
преобразует широкую строку таким образом, что wcscmp даст тот же результат, что и wcscoll (функция) |
| сравнивает две строки (функция) |
|
Документация C++ для strcoll |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/strcoll