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 символов преобразованной строки записываются в destination, включая завершающий нулевой символ, а длина полной преобразованной строки возвращается, исключая завершающий нулевой символ.
Если 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 << "In the Swedish locale: "; if (out1 < out2) std::wcout << in1 << " before " << in2 << '\n'; else std::wcout << in2 << " before " << in1 << '\n'; std::wcout << "In lexicographical comparison: "; if (in1 < in2) std::wcout << in1 << " before " << in2 << '\n'; else std::wcout << in2 << " before " << in1 << '\n'; }
Вывод:
In the Swedish locale: år before ängel In lexicographical comparison: ängel before år
Смотрите также
преобразует строку так, чтобы
strcmp
давал тот же результат, что и
strcoll
(функция) |
|
|
[virtual]
|
преобразует строку так, чтобы сортировка могла быть заменена сравнением
(виртуальная защищённая функция-член
std::collate<CharT>
)
|
|
сравнивает две широкие строки в соответствии с текущей локалью
(функция) |
|
|
Документация C
для
wcsxfrm
|
|