Пространства имён
Варианты
Действия

std::wcsxfrm

Материал из cppreference.com
 
 
 
Широкие строки с завершающим нулём
Функции
Операции с символами
Преобразования в числовые форматы
(C++11)(C++11)
(C++11)(C++11)
Операции со строками
Операции с массивами
 
<tbody> </tbody>
Определено в заголовочном файле <cwchar>
std::size_t wcsxfrm( wchar_t* dest, const wchar_t* src, std::size_t count );

Преобразует широкую строку с нулевым завершающим символом, на которую указывает src, в форму, определённую реализацией, так что сравнение двух преобразованных строк с помощью std::wcscmp даёт тот же результат, что и сравнение исходных строк с std::wcscoll в текущей локали C.

Первые count символов преобразованной строки записываются в место назначения, включая завершающий нулевой символ, и возвращается длина полной преобразованной строки, исключая завершающий нулевой символ.

Если count равно 0, то dest может быть нулевым указателем.

Примечание

Правильная длина буфера, который может принять всю преобразованную строку, равна 1 + std::wcsxfrm(nullptr, src, 0).

Эта функция используется при выполнении нескольких сравнений в зависимости от локали с использованием одной и той же широкой строки или набора широких строк, поскольку более эффективно использовать std::wcsxfrm для однократного преобразования всех строк и последующего сравнения преобразованных широких строк с помощью std::wcscmp.

Параметры

dest указатель на первый элемент широкой строки с нулевым завершающим символом, в которую нужно записать преобразованную строку
src указатель на строку широких символов, завершающуюся нулём, для преобразования
count максимальное количество символов для вывода

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

Длина преобразованной широкой строки, не включая завершающий нулевой символ.

Пример

#include <cwchar>
#include <iostream>

int main()
{
    std::setlocale(LC_ALL, "sv_SE.utf8");

    std::wstring in1 = L"\u00e5r";
    std::wstring out1(1 + std::wcsxfrm(nullptr, in1.c_str(), 0), L' ');
    std::wstring in2 = L"\u00e4ngel";
    std::wstring out2(1 + std::wcsxfrm(nullptr, in2.c_str(), 0), L' ');

    std::wcsxfrm(&out1[0], in1.c_str(), out1.size());
    std::wcsxfrm(&out2[0], in2.c_str(), out2.size());

    std::wcout << L"В шведской локали: ";
    if (out1 < out2)
        std::wcout << in1 << L" перед " << in2 << '\n';
    else
        std::wcout << in2 << L" перед " << in1 << '\n';

    std::wcout << L"В лексикографическом сравнении: ";
    if (in1 < in2)
        std::wcout << in1 << L" перед " << in2 << '\n';
    else
        std::wcout << in2 << L" перед " << in1 << '\n';

}

Вывод:

В шведской локали: år before ängel
В лексикографическом сравнении: ängel before år

Смотрите также

преобразовывает строку так, чтобы strcmp давала тот же результат, что и strcoll
(функция) [править]
[virtual]
преобразует строку так, чтобы сортировки можно заменить сравнение
Оригинал:
transforms a string so that collation can be replaced by comparison
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(virtual protected std::collate функция-элемент) [править]
сравнивает две широких строки в соответствии с текущей локалью
(функция) [править]