Spec-Zone.ru › C++

std::wcscoll

Определён в заголовочном файле <cwchar>
int wcscoll( const wchar_t* lhs, const wchar_t* rhs );

Сравнивает две строки широких символов, завершающиеся нулевым символом, в соответствии с локалью, которая была установлена последней с помощью std::setlocale, как определено категорией LC_COLLATE.

Параметры

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

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

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

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

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

Примечания

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

Пример

#include <clocale>
#include <iostream>

void try_compare(const wchar_t* p1, const wchar_t* p2)
{
    if (std::wcscoll(p1, p2) < 0)
        std::wcout << p1 << " before " << p2 << '\n';
    else
        std::wcout << p2 << " before " << p1 << '\n';
}

int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout << "In the American locale: ";
    try_compare(L"hrnec", L"chrt");

    std::setlocale(LC_COLLATE, "cs_CZ.utf8");
    std::wcout << "In the Czech locale: ";
    try_compare(L"hrnec", L"chrt");

    std::setlocale(LC_COLLATE, "en_US.utf8");
    std::wcout << "In the American locale: ";
    try_compare(L"år", L"ängel");

    std::setlocale(LC_COLLATE, "sv_SE.utf8");
    std::wcout << "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

См. также

strcoll
сравнивает две строки в соответствии с текущей локалью
(функция)
do_compare
[виртуальная]
сравнивает две строки, используя правила сортировки этой грани
(виртуальная защищённая функция-член std::collate<CharT>)
wcsxfrm
преобразует строку широких символов так, чтобы wcscmp давала тот же результат, что и wcscoll
(функция)
Документация по C для wcscoll

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

Spec-Zone.ru

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