📜  C++ wcsxfrm()

📅  最后修改于: 2020-09-25 10:11:46             🧑  作者: Mango

C++中的wcsxfrm() 函数将给定的以null终止的宽字符串转换为实现定义的形式。

wcsxfrm() 函数将转换宽字符串 ,以便使用wcscmp() 函数比较两个转换后的宽字符串会产生与在当前C语言环境中使用wcscoll() 函数比较原始宽字符串相同的结果。

例如,x和y是两个宽字符串 。 a和b是通过使用wcsxfrm 函数分别转换x和y形成的两个宽字符串 。

然后,

wcscmp(a,b) = wcscoll(x,y)

它在头文件中定义。

wcsxfrm()原型

size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count );

wcsxfrm() 函数将src指向的宽字符串的第一个count宽字符转换为实现定义的形式,结果存储在dest指向的内存位置。

在以下情况下,此函数的行为是不确定的:

wcsxfrm()参数

wcsxfrm()返回值

wcsxfrm() 函数返回转换后的宽字符数,不包括终止的空宽字符 L'\ 0'。

示例:wcsxfrm() 函数如何工作?

#include 
#include 
#include 
using namespace std;

int main()
{
    setlocale(LC_COLLATE, "cs_CZ.UTF-8");
    
    const wchar_t* s1 = L"\u0068\u0072\u006e\u0065\u0063";
    const wchar_t* s2 = L"\u0063\u0068\u0072\u0074";
    wchar_t t1[20], t2[20];
    
    cout << "wcscoll returned " << wcscoll(s1,s2) << endl;
    cout << "Before transformation, " << "wcscmp returned " << wcscmp(s1,s2) << endl;
    
    wcsxfrm(t1,s1,10);
    wcsxfrm(t2,s2,10);
    
    cout << "After transformation, " << "wcscmp returned " << wcscmp(t1,t2) << endl;
    return 0;
}

运行该程序时,输出为:

wcscoll returned -1
Before transformation, wcscmp returned 1
After transformation, wcscmp returned -1