Spec-Zone.ru › C

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

См. также

wcscoll
(C95)
сравнивает две широкие строки в соответствии с текущим языковым стандартом
(функция)
strxfrm
преобразует строку таким образом, что strcmp даст тот же результат, что и strcoll
(функция)
wcsxfrm
(C95)
преобразует широкую строку таким образом, что wcscmp даст тот же результат, что и wcscoll
(функция)
strcmp
сравнивает две строки
(функция)
Документация C++ для strcoll

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/strcoll

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API