此数据类型主要解决汉字的问题吧。
理论方面我转载其他优秀博主的博客,我这里就直接贴代码讲解具体使用吧,
另外,宽字符录入(输入)的问题,我找遍全网也没见得可以用的,
确实是有wscanf函数,但是没有函数使用样例和报错解决办法,实在让人为难,于是自己去翻函数库一个个找,,,才找到(原创不易啊)
另外,所用函数是vs提供,所以可能会有其他编译器无法使用的情况,故特别补充非vs编译器可以使用的版本如下:
(选用Dev为样例)
#include<iostream> #include<cstdio> #include<locale.h> #include<windows.h> using namespace std; int main() { _wsetlocale(LC_ALL, L"chs");//或者 setlocale(LC_ALL, "chs"); //若删除上句,仍能输出整个汉字语句,但不能单独 使用/输出 一个汉字 wchar_t s[5][81]; /*方式1 wcin >> s; wcout << s << endl; */ /*方式2 _getws(s); wprintf(L"%ls ", s); */ system("pause>nul"); return 0; }
vs代码如下:
#include<iostream> #include<locale.h> #include<stdio.h> #include<Windows.h> using namespace std; locale loc("chs"); /* //语句需要: #include<locale.h> locale loc("chs"); _wsetlocale(LC_ALL, L"chs");//或者setlocale(LC_ALL, "chs"); wcout.imbue(loc); */ int main() { _wsetlocale(LC_ALL, L"chs");//或者setlocale(LC_ALL, "chs"); wcout.imbue(loc); wchar_t s[] = L"我爱你"; wchar_t S[] = L"你爱我吗"; /* _getws_s(s);//输入类型1 wcin >> s;//输入类型2 */ wprintf(L"%ls ", S); wprintf(L"%s ", S); printf("%S ", S); /* %s 和 %S 输出区别是: %s窄字符输出, %ls宽字符输出, %S输出与输出函数相反宽度的字符格式 (也就是printf因为默认支持的宽度是单字符,而%S偏要使用相反的,那么就 使用宽字符格式输出,而wprintf默认支持的宽度是宽字节,%S偏要使用相反的, 意思就是使用单字符格式输出) */ system("pause>nul");//输出类型1 wcout << s << endl; system("pause>nul");//输出类型2 putwchar(s[2]);//或者printf("%lc",s[2]); wcout <<' '<< S[0] << endl; puts((s[2] == S[0])?"yes":"no"); system("pause>nul");//简单理解使用 return 0; }
详细宽字符及其衍生函数:https://www.cnblogs.com/lanhaicode/p/10574260.html
_wsetlocale(LC_ALL, L"chs")//setlocale(LC_ALL, "chs")简单说明及char与wchar_t转换:https://www.cnblogs.com/zplutor/archive/2010/11/27/1889227.html
路过点个赞?