【转】string,wstring,cout,wcout 与中文字符的输入输出

转自:string,wstring,cout,wcout 与中文字符的输入输出

首先说明是什么string与wstring

在C++标准里定义了两个字符串string和wstring 

typedef basic_string<char> string; 

typedef basic_string<wchar_t> wstring; 

前者string是常用类型,可以看作char[],其实这正是与string定义中的_Elem=char相一致。而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 locale&loc);
参数说明:
loc: const 对象引用,表示输出时,使用的区域语言对象
返回值:之前的使用的区域语言

c++中,可以直接利用string及cout进行中文的存储及输出:

#include <iostream>  
#include <string>  
using namespace std;  void main()  
{  string s1="第一";  cout<<s1<<endl;   
}  

正常输出:
第一
但是有些时候不得不用到wstring来存储中文字符,这时输出需要
导入locale头文件
中文字符前需要加L,并用wstring存储
输出前更改本地语言,wcout.imbue(locale("chs"))
用wcout输出

#include <iostream>   
#include <string>   
#include <locale>   
using namespace std;  void main()  
{  string s1="第一";  wstring s2=L"第二";  cout<<s1<<endl;  wcout.imbue(locale("chs"));  wcout<<s2<<endl;  
}  

结果便是:

第一

第二

wstring 返回“第二”的size为2.如果是string,返回的size为4.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

autoconf常用宏

AC_INIT (unique-file-in-source-dir)处理所有命令行参数并且寻找源代码目录。unique-file-in-source-dir是一些在包的源代码目录中文件&#xff1b; configure在目录中检查这些文件是否存在以确定该目录是否包含源代码。人们可能偶尔会用--srcdir给出错误的目录&#xff1b;这…

maple 2018 窗口关闭提示乱码_如果解决SOLIDWORKS工程图转CAD字体出现乱码的问题_SolidWorks生信科技...

操作SOLIDWORKS工程图转CAD时&#xff0c;由于SOLIDWORKS使用的是Windows字体&#xff0c;而CAD使用的是线性字体&#xff0c;字体就容易出现乱码的苦恼。一般出现乱码是因为字体映射里面没有中文&#xff0c;所以会导致乱码。遇到这种情况&#xff0c;只需找到字体映射文件&am…

解决firefox不能安装Flash插件

当你在浏览一个含有Flash的网页的时候&#xff0c;Firefox会提醒你正常浏览网页需要安装缺少的插件&#xff08;这个提醒通常在地址栏下方和Flash的占位区上&#xff09;&#xff0c;按照他的提示安装Flash插件即可。 另外你也可以手动安装&#xff0c;在Windows下, 可以在这里…

【转】apt 和 apt-get的区别

转自&#xff1a;https://www.sysgeek.cn/apt-vs-apt-get/ Ubuntu 16.04 发布时&#xff0c;一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年&#xff0c;apt 命令就已经发布了第一个稳定版&#xff0c;只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注…

准确检测图像的轮廓 opencv_图像处理案例实战

1. 切边源图像&#xff1a; 需求&#xff1a;扫描仪扫描到的法律文件&#xff0c;需要切边&#xff0c;去掉边缘空白&#xff0c;这样看上去才真实&#xff0c;人工操作成本与时间花费高&#xff0c;希望程序自动实现&#xff0c;高效、准确。 实现思路&#xff1a;边缘检测 轮…

O_EXCL

open系统调用&#xff1a; #include <fcntl.h>int open(const char *pathname, int oflag, ... /*mode_t mode */ );其中&#xff0c;oflag有个可选值为&#xff1a; O_EXCL Generate an error if O_CREAT is also specified and the file already exists. This test fo…

sql 解锁被锁定的账号

账号被锁定&#xff0c;在属性那里直接取消lock-out无法解锁。运行这条命令即可&#xff1a;ALTER LOGIN UserLogin WITH PASSWORD NewPassword UNLOCK MUST_CHANGE 转载于:https://www.cnblogs.com/bigshot-z/archive/2010/07/12/1775856.html

ubuntu18分辨率变低,无法调整,最高只有1024*768

方法一 运行xrandr&#xff0c;判断哪个显示器分辨率最大&#xff0c;那个就是真实的显示器 记住是LVDS1还是VGA1这里记住显示的名称 如果是两个&#xff0c;那么恭喜你可以继续设置后 应该就好&#xff0c;只有一个请使用方法二 具体步骤&#xff1a; 下载arandr sudo apt-g…

pp助手苹果版_再见!PP助手iOS端即将下线 曾是中国最大的苹果助手

苹果PP助手即将下线 在今日PP助手官方发布公告&#xff1a;尊敬的PP助手iOS版用户&#xff1a;衷心感谢您多年以来对我们的支持及厚爱。因业务调整&#xff0c;PP助手将于2020年2月28日正式下线iOS版产品&#xff0c;包括PP助手iOS版、PP助手iOS PC版等。 对您造成的不便还望理…

关于规划修编标准的问题

关于规划修编标准的问题 此问题只对规划修编数据库标准&#xff08;报批稿&#xff09;进行的分析!(1)标准的图形表字段和字段的值要可以推导出指标表格&#xff0c;且推导公式明确和正确&#xff1b;(2)地类编码体系要统一&#xff0c;且唯一&#xff0c;要有地类名称和地类代…

【转】Xrandr (简体中文)

转自&#xff1a;Xrandr (简体中文) - ArchWiki "xrandr" 是一款官方的 RandR (Resize and Rotate)维基百科&#xff1a;X 窗口系统 扩展配置工具。它可以设置屏幕显示的大小、方向、镜像等。对多显示器的情况&#xff0c;请参考 Multihead 页面。 Contents 1安装 …

oppo手机工程模式清除数据需要密码_手机隐藏的快捷键都有哪些?

手机从开发出来到现在&#xff0c;已经换了很多代了&#xff0c;从大哥大&#xff0c;小灵通&#xff0c;到诺基亚到山寨机到苹果到华为&#xff0c;几十年过去了。手机从奢侈品一下飞去每个人手里&#xff0c;反正我手机有手机已经快10年了&#xff0c;所以我相信每个人对自己…

关于竖表转横表的问题

本文作者&#xff1a;dinya内容摘要&#xff1a;在开发过程&#xff0c;经常遇到一些将表的显示方式进行转换的需求&#xff0c;我们习惯性称之为竖表到横表的转换&#xff0c;本文通过一个例子来简要说明常见的两种竖表转横表的问题。本文适宜读者范围&#xff1a;oracle初级&…

计算机大小端

大端模式   所谓的大端模式&#xff0c;是指数据的高位&#xff0c;保存在内存的低地址中&#xff0c;而数据的低位&#xff0c;保存在内存的高地址中&#xff0c;这样的存储模式有点儿类似于把数据当作字符串顺序处理&#xff1a;地址由小向大增加&#xff0c;而数据从高位往…

全系光谱完整版

宇宙射线也叫电磁波&#xff0c;其中包含γ射线、X射线、紫外线、可见光、红外线、近红外、远红外&#xff0c;还有无线电和超声波。 无线电波是振荡电路中自由电子作周期性的运动产生的&#xff0e; 红外线、可见光、紫外线是原子外层电子受激发产生的&#xff0e; X射线是原…

cat 几行_迷风花说Cat!Cat因为林教练是好教练回去现实却给了一巴掌

滔博TES前主教练迷风花26日发布了微博&#xff0c;就自己离职、Cat林教练事件以及汤汤纵情转会事件进行了澄清&#xff0c;网友粉丝们在看到教练迷风花发布的微博后&#xff0c;更加了解了很多事情的真相&#xff0c;粉丝们纷纷对教练迷风花送上了祝福&#xff0c;教练迷风花到…

c# equals与==的区别

对于值类型&#xff0c;如果对象的值相等&#xff0c;则相等运算符 () 返回 true&#xff0c;否则返回 false。对于string 以外的引用类型&#xff0c;如果两个对象引用同一个对象&#xff0c;则 返回 true。对于 string 类型&#xff0c; 比较字符串的值。操作比较的是两个变…

linux下C语言中的flock函数用法

表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件&#xff0c;无法锁定文件的某一区域。 参数 operation有下列四种…

c# - C#用fo-dicom对CT图像的PixelData进行处理和转换

转自&#xff1a;c# - C#用fo-dicom对CT图像的PixelData进行处理和转换 - IT工具网 对于某些测试&#xff0c;我试图操纵 PixelData以 dicom 格式存储的 CT 图像的元素&#xff0c;并使用 C# 中的 Fellow Oak Dicom 将其写回文件中。经过一番研究&#xff0c;我发现我想要处理的…

android studio 显示图形_显示服务器实现(一)

在一个多窗口的图形化操作系统中&#xff0c;显示服务器的任务就是组织这些窗口展现给用户。实际的显示服务器有Linux世界基于X11协议的XServer或者Wayland协议的Weston&#xff0c;还有Android里的SurfaceFlinger。但是除了显示&#xff0c;他们同时包含了输入管理&#xff08…