std::wcsxfrm
来自 cppreference.cn
在头文件 <cwchar> 中定义 |
||
std::size_t wcsxfrm( wchar_t* dest, const wchar_t* src, std::size_t count ); |
||
将 src 指向的以空字符结尾的宽字符串转换为实现定义的形式,使得使用 std::wcscmp 比较两个转换后的字符串的结果与在当前 C 区域设置中使用 std::wcscoll 比较原始字符串的结果相同。
转换后的字符串的前 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 << "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 相同的结果(函数) | |
[虚函数] |
转换字符串,以便整理可以通过比较来替代 ( std::collate<CharT> 的虚保护成员函数) |
根据当前语言环境比较两个宽字符串 (函数) | |
C 文档 关于 wcsxfrm
|