Wide char与char数据类型类似,不同之处在于Wide char占用的空间是char数据类型的两倍,因此可以占用更大的值。char可以接受256个值,对应于ASCII表中的条目。另一方面,宽字符可以接受65536个值,对应于UNICODE值。UNICODE值是最近的一个国际标准,允许对几乎所有语言和常用符号的字符进行编码。
- 就像字符常量的类型是char一样,宽字符的类型是wchar\u t。
- 此数据类型占用2或4个字节,具体取决于所使用的编译器。
- 在使用日语等国际语言时,通常使用wchar__t数据类型。
下面是一个简单的C++实现,展示了如何使用WHARGART:
// An example C++ program to demonstrate use of wchar_t #include <iostream> using namespace std; int main() { wchar_t w = L 'A' ; cout << "Wide character value:: " << w << endl ; cout << "Size of the wide char is:: " << sizeof (w); return 0; } |
输出:
Wide character value:: 65 Size of the wide char is:: 4
- L是宽字符文字和宽字符串文字的前缀,它告诉编译器该字符或字符串属于宽字符类型。
- 在操作宽字符类型时,在扫描(wcin)或打印(wcout)等操作中,w是前缀。
宽字符类型数组或字符串: 就像char-type数组字符串一样,也可以有宽char-type数组字符串。下面是C++实现,以显示宽字符类型数组字符串:
// An example C++ program to demonstrate use // of wchar_t in array #include <iostream> using namespace std; int main() { // char type array string char caname[] = "geeksforgeeks" ; cout << caname << endl ; // wide-char type array string wchar_t waname[] = L "geeksforgeeks" ; wcout << waname << endl; return 0; } |
输出:
geeksforgeeks geeksforgeeks
输出是相同的,但唯一的区别是宽字符数组使用两倍的内存来编码每个字符。
宽字符数组字符串的函数: 宽字符数组字符串的大多数函数都在头文件cwchar中定义。
wcslen(): 语法:size_t wcslen(const wchar_t*wcs); 它返回宽字符串的长度。这是斯特伦的宽字符等价物。
下面是一个简单的C++实现,展示如何获取宽字符数组字符串的长度。
// An example C++ program to demonstrate use // of wcslen() #include <iostream> #include<cwchar> using namespace std; int main() { // wide-char type array string wchar_t waname[] = L "geeksforgeeks" ; wcout << L "The length of '" << waname << L "' is " << wcslen(waname) << endl; return 0; } |
输出:
The length of 'geeksforgeeks' is 13
wcscpy(): 语法:wchar_t*wcscpy(wchar_t*strDestination,const wchar_t*strSource); wcscpy()代表宽字符串副本。它将strSource指向的宽字符串复制到strDestination指向的宽字符数组中。这是strcpy的宽字符等价物。 下面是一个简单的C++实现,展示了WCSCPY的使用:
// An example C++ program to demonstrate use // of wcscpy() #include <iostream> #include<cwchar> using namespace std; int main() { wchar_t waname[] = L "geeksforgeeks" ; wchar_t wacopy[14]; wcscpy(wacopy, waname); wcout << L "Original = " << waname << L "Copy = " << wacopy << endl; return 0; } |
输出:
Original = geeksforgeeks Copy = geeksforgeeks
wcscat(): 语法:wchar_t*wcscat(wchar_t*strDestination,const wchar_t*strSource); wcscat()代表宽字符串连接。将strSource宽字符串的副本附加到strDestination宽字符串。这是strcat的宽字符等价物。
下面是一个简单的C++实现,展示了WCSCAT的使用:
// An example C++ program to demonstrate use // of wcscat() #include <iostream> #include<cwchar> using namespace std; int main() { wchar_t string1[] = L "geeksforgeeks" ; wchar_t string2[] = L " is for Geeks" ; wcscat(string1, string2); wcout << L "Concatenated wide string is = " << string1 << endl; return 0; } |
输出:
Concatenated wide string is = geeksforgeeks is for Geeks
wcscmp(): 语法:int wcscmp(const wchar_t*wcs1,const wchar_t*wcs2); wcscmp()代表宽字符串比较。如果wcs1和wcs2相等,则返回0;如果不匹配的第一个宽字符在wcs1中的值大于在wcs2中的值,则返回大于零的值。如果不匹配的第一个宽字符在wcs1中的值小于wcs2中的值,则返回小于零的值。这是strcmp的宽字符等价物。
下面是一个简单的C++实现,展示了WCSCMP的使用:
// An example C++ program to demonstrate use // of wcscmp() #include <iostream> #include<cwchar> using namespace std; int main() { wchar_t string1[] = L "geeksforgeeks" ; wchar_t string2[] = L "GEEKS" ; wcout << L "Comparison1 = " << wcscmp(string1, string2) << endl; wcout << L "Comparison2 = " << wcscmp(string1, string1) << endl; wcout << L "Comparison3 = " << wcscmp(string2, string1) << endl; return 0; } |
输出:
Comparison1 = 1 Comparison2 = 0 Comparison3 = -1
wcstok(): 语法:wchar_t*wcstok(wchar_t*str,const wchar_t*delim,wchar_t**ptr); wcstok()代表宽字符串标记化。在str指向的以null结尾的宽字符串中查找下一个标记。分隔符由delim指向的以null结尾的宽字符串标识。 str–指向要标记化的以null结尾的宽字符串的指针。 delim–指向以null结尾的宽字符串标识分隔符的指针。 ptr–指向wchar_t*类型的对象的指针,wcstok使用该对象存储其内部状态。 这是strtok()的宽字符等价物。 下面是一个简单的C++实现,展示了WCSTOKE的使用:
// An example C++ program to demonstrate use // of wcstok() #include <iostream> #include<cwchar> using namespace std; int main() { wchar_t string[] = L "geeksforgeeks,is,for,GEEKS" ; wchar_t * internal_state; wchar_t delim[] = L "," ; wchar_t * token = wcstok(string, delim, &internal_state); while (token) { wcout << token << endl; token = wcstok(NULL, delim, &internal_state); } return 0; } |
输出:
geeksforgeeks is for GEEKS
wcsncpy(): 语法:wchar_t*wcsncpy(wchar_t*目的地,常量wchar_t*源,大小n); 将源的前n个宽字符复制到目标。如果在复制n个字符之前找到源范围字符串的结尾,则会使用其他空范围字符填充目标,直到总共n个字符。这是strncpy()的宽字符等价物。
下面是一个简单的C++实现,展示了WCSncPy的使用:
// An example C++ program to demonstrate use // of wcsncpy() #include <iostream> #include<cwchar> using namespace std; int main() { wchar_t string1[] = L "Geeks For Geeks" ; wchar_t string2[20]; wchar_t string3[20]; wcsncpy(string2, string1, 20); // partial copy wcsncpy(string3, string2, 5); string3[5] = L ' ' ; // null character manually added wcout << string1 << endl << string2 << endl << string3 ; return 0; } |
输出:
Geeks For Geeks Geeks For Geeks Geeks
wcsstr(): 语法:const wchar_t*wcsstr(const wchar_t*wcs1,const wchar_t*wcs2); 返回指向wcs1中第一个出现的wcs2的指针。如果wcs2不是wcs1的一部分,则返回空指针。这里,wcs1是要扫描的宽字符串,wcs2包含要匹配的序列。这是strstr()的宽字符等价物。
下面是一个简单的C++实现,展示了WCSRST:
// An example C++ program to demonstrate use // of wcsstr() #include <iostream> #include<cwchar> using namespace std; int main() { wchar_t string1[] = L "Geeks Are Geeks" ; wchar_t * string2 = wcsstr(string1, L "Are" ); wcsncpy(string2, L "For" , 3); wcout << string1 << endl; return 0; } |
输出:
Geeks For Geeks
参考: http://www.cplusplus.com/reference/cwchar/
本文由 马扎尔·伊玛目·汗 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。