Spec-Zone.ru › C

wcscoll

Определено в заголовке <wchar.h>
int wcscoll( const wchar_t *lhs, const wchar_t *rhs );
(с C95)

Сравнивает две строки широких символов с завершением нулем в соответствии с порядком сортировки, определённым категорией LC_COLLATE текущего установленного языка.

Параметры

lhs, rhs - указатели на строки широких символов с завершением нулем, которые нужно сравнить

Возвращаемое значение

Отрицательное значение, если lhs меньше (предшествует) rhs.

​0​, если lhs равно rhs.

Положительное значение, если lhs больше (следует за) rhs.

Примечания

Порядок сортировки — это лексикографический порядок: позиция буквы в национальном алфавите (ее эквивалентный класс) имеет более высокий приоритет, чем ее регистр или вариант. В рамках эквивалентного класса строчные символы сортируются перед их заглавными эквивалентами, а порядок, специфичный для языка, может применяться к символам с диакритическими знаками. В некоторых языках группы символов сравниваются как единые единицы сортировки. Например, "ch" в чешском языке следует за "h" и предшествует "i", а "dzs" в венгерском языке следует за "dz" и предшествует "g".

Пример

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
void try_compare(const wchar_t* p1, const wchar_t* p2)
{
    if(wcscoll(p1, p2) < 0)
        printf("%ls before %ls\n", p1, p2);
    else
        printf("%ls before %ls\n", p2, p1);
}
 
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    printf("In the American locale: ");
    try_compare(L"hrnec", L"chrt");
 
    setlocale(LC_COLLATE, "cs_CZ.utf8");
    printf("In the Czech locale: ");
    try_compare(L"hrnec", L"chrt");
 
    setlocale(LC_COLLATE, "en_US.utf8");
    printf("In the American locale: ");
    try_compare(L"år", L"ängel");
 
    setlocale(LC_COLLATE, "sv_SE.utf8");
    printf("In the Swedish locale: ");
    try_compare(L"år", L"ängel");
}

Возможный вывод:

In the American locale: chrt before hrnec
In the Czech locale: hrnec before chrt
In the American locale: ängel before år
In the Swedish locale: år before ängel

Ссылки

  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.29.4.4.2 Функция wcscoll (стр. 433-434)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.24.4.4.2 Функция wcscoll (стр. 379-380)

См. также

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

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

Spec-Zone.ru

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