std::wcsxfrm
| Определено в заголовочном файле <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 функция-элемент)
|
| сравнивает две широких строки в соответствии с текущей локалью (функция) | |
Документация C по wcsxfrm
| |