Namespaces
Variants

strcoll

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <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");
    // Альтернативно, ISO-8859-2 (также известный как Latin-2)
    // может также работать на некоторых ОС:
    // 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:2024):
  • 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
(функция)
сравнивает две строки
(функция)