帝国网站管理系统前台,免费photoshop下载,淮北网络推广,济南建设局转自#xff1a;string,wstring,cout,wcout 与中文字符的输入输出
首先说明是什么string与wstring 在C标准里定义了两个字符串string和wstring
typedef basic_stringchar string;
typedef basic_stringwchar_t wstring;
前者string是常用类型#xff…转自string,wstring,cout,wcout 与中文字符的输入输出
首先说明是什么string与wstring 在C标准里定义了两个字符串string和wstring
typedef basic_stringchar string;
typedef basic_stringwchar_t wstring;
前者string是常用类型可以看作char[]其实这正是与string定义中的_Elemchar相一致。而wstring使用的是wchar_t类型这是宽字符用于满足非ASCII字符的要求例如Unicode编码中文日文韩文什么的。对于wchar_t类型实际上C中都用与char函数相对应的wchar_t的函数因为他们都是从同一个模板类似于上面的方式定义的。因此也有wcout, wcin, werr等函数。
实际上string也可以使用中文但是它将一个汉字写在2个char中。而如果将一个汉字看作一个单位wchar_t的话那么在wstring中就只占用一个单元其它的非英文文字和编码也是如此。
什么是locale
C/C程序中locale将决定程序所使用的当前语言编码、日期格式、数字格式及其它与区域有关的设置locale设置的正确与否将影响到程序中字符串处理wchar_t如何输出、strftime()的格式等。因此对于每一个程序都应该慎重处理locale设置。C locale和C locale是独立的。C locale用setlocale(LC_CTYPE, “”)初始化C locale用std::locale::global(std::locale(“”))初始化。这样就可以根据当前运行环境正确设置locale。
什么是imbue imbue函数是指对象引用,表示输出时,使用的区域语言对象。 函数原型: locale basic_ios::imbue(const localeloc); 参数说明: loc: const 对象引用,表示输出时,使用的区域语言对象 返回值:之前的使用的区域语言 c中可以直接利用string及cout进行中文的存储及输出 #include iostream
#include string
using namespace std; void main()
{ string s1第一; couts1endl;
}
正常输出 第一 但是有些时候不得不用到wstring来存储中文字符这时输出需要 导入locale头文件 中文字符前需要加L并用wstring存储 输出前更改本地语言wcout.imbue(locale(chs)) 用wcout输出
#include iostream
#include string
#include locale
using namespace std; void main()
{ string s1第一; wstring s2L第二; couts1endl; wcout.imbue(locale(chs)); wcouts2endl;
} 结果便是 第一 第二 wstring 返回“第二”的size为2.如果是string返回的size为4.