中文字在C/C++中的处理

现在编程的语言和编程环境随着中国的发展開始对中文有进一步的支持。可是对中文的支持整体来说是有缺陷的,并且有与编译环境的不同导致中文在当前的C/C++中有非常多问题,并且非常多版本号对中文的支持是不全然的。就拿DEV-C++和VS2005为例。对与MSDN的帮助和网上的讲述两者在那些代码的支持有非常多不同的地方。

而我要讨论的就是对于中文在C/C++的应用方法。

首先中文字是在一般char的范围以外的,所以我们不能用单个char存储我们的中文字,于是我们大多引进wchar_t这种宽字符的数据类型。可是在我所用过的编译环境中通常是定义为wchar_t。这是C++语言中认可的定义。他的空间就和unsigned short的大小一样,所以有这种内部定义:typedef
unsigned short wchar_t位的。

在DEV-C++中我们有非常多方法是不能用的,对于VS2005,我们能够定义和应用的非常多方法和和非常多库函数在DEV-C++都不能够用的。如在MSDN和非常多网络资料中提到的输入和输出方法像wcin和wout在DEV-C++都是显示没有定义的,也就是说DEV-C++是不支持这些方法的。简单宽字符的输入和输出例如以下:

#include<iostream>

using namespace std;

int main()

{

wchar_t a[3];

wcin >> a;

wcout << a << endl;

return 0;

}

但这样仅仅能输入单个汉字字符,假设超过2个中文字就会有溢出的错误,而用这个方案,尽管我们用了wchar但全然没有突出我们的目的,它仍然是一个中文字占两个wchar_t单位。并且我们也没有办法对里面的汉字字符进行操作所以这是不可行的,但这是C的使用方法。在C++中wchar则对其进行了改动,使得中文的支持更加好了。

在C++中,wchar_t是语言内建的数据类型。wchar_t的长度是由实现决定的。

如今我们正式開始讨论中文在我们的C++中的支持和应用的问题。

C++是一种非常好的语言,它为了适合不同的地域语言的开发,它增加了一个叫做locale包的头文件。里面定义了不同语言和语言的缩写。这是我们使用wchar_t进行中文的个方面的操作的一个重要的环节。对于我们的输入输出有非常重要的影响。

首先我们的应用事例是这种:

#include <iostream>

#include <locale>

using namespace std;

int main()

{

locale loc( "Chinese-simplified" );

wcin.imbue(loc);

wcout.imbue( loc );

//上面三行代码和setlocale(LC_ALL,"chs");作用是一样的。

wchar_t c[4];

wcin >> c;

wcout << c <<endl;

return 0;

}

在这里我门用到了#include <locale> 用来包括这个头文件,然后生成一个locale的对象。里面的參数是仅仅採用中文,接着我们对我们的输入和输出进行imbue的设置。是用来Changes
the locale的作用。于是我们输入和输出就会变成我们所须要的以中文字的为单位的存储过程。上例中的c[4] 则能够输入3个中文字,最后一个是’\0’,这样就初步达到了我们所要求的效果。同一时候我们就能够取出我们要的每一个定位的中文字符,进行和char相同的数据处理。

中文在C/C++中的处理和汉字乱码问题(wchar_t)的更多相关文章

  1. mysql在cmd中查询到的汉字乱码问题解决 方法一

    只要执行如上两个 set character_set_connection = gbk; set character_set_results= gbk; 将编码格式转换成gbk即可

  2. 解决php中echo出来的汉子乱码

    问的人太多了,就列出来展示给大家! 需要了解的概念: Content-Type:用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据 MIME:MIME类型就是设定某种扩展 ...

  3. 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK

    一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...

  4. DecimalFormat 中的 # 与 0 的区别(中文帮助文档中翻译可能是错误的)

    想对数字进行格式化的时候,可能会使用到 java.text.DecimalFormat 类.中文帮助文档中,有如下符号 位置 本地化 含义 0 数字 是 阿拉伯数字 # 数字 是 阿拉伯数字,如果不存 ...

  5. 将url传参的中文字符在页面中显示正常

    //将url传参的中文字符在页面中显示正常var url=decodeURI(url);

  6. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  7. 记录一下Vray5中文汉化版本中导出EXR或vrimg多通道文件的那些坑和解决方法

    最近在给一个培训机构代课,学生英语基础差,就安装了Vray5的中文版,噩梦从此开始. 做过合成的都知道,需要输出多通道到NUKE或者AE中进行合成,通常情况下把多个pass分成不同的文件对硬盘反复读写 ...

  8. PHP实现中文字串截取无乱码的方法

    直接使用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符“锯”成两半.解决办法: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. ...

  9. SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)

    注:本文为个人转存,原文地址:http://blog.csdn.net/qiuyu8888/article/details/8021410 问题:SQL版在使用过程中有时会出现乱码,我的症状是中文字符 ...

随机推荐

  1. IIS配置负载均衡

    一.下载Nginx安装包 二.修改nginx.conf文件信息 如图: 三.重新加载Nginx (nginx -s reload) 启动Nginx: start nginx 停止Nginx:nginx ...

  2. ubuntu系统中查看本机cpu和内存信息的命令和用法

    https://zhidao.baidu.com/question/192966322.html 写出ubuntu linux系统中查看本机cpu和内存信息的命令和用法,以及如何解读这些命令 ubun ...

  3. git Eclipse项目不显示当前分支

    问题: 在Eclipse中,导入新的git项目,在项目上不再显示当前所处的分支,也不再显示修改了哪些文件 解决: 右键选中项目  -->  Team  -->  Share Project ...

  4. Git——基本操作

    Shell 基本概念 shell俗称壳,为使用者提供使用界面,例如DOS下command以及后来的cmd.exe shell分类 图形界面shell,提供友好的可视化界面,例如windows操作界面, ...

  5. 00JavaScript

    JavaScript JavaScript是由网景公司开发的一种跨平台面向对象(object-oriented)的网页脚本语言(Web Script Language)是目前流行的网页特效设计语言Ja ...

  6. CMU-准备

    TOEFL成绩90分以上,GPA大于3.0,GRE1250分以上(不做明确要求) 申请条件:GRE成绩,建议有专科成绩;托福250,雅思7.0;简历;3封推荐信 TOEFL(The Test of E ...

  7. 第二节:SQLServer导出-重置sa密码-常用sql语句

    1.SQLServer导出: 点击要导出数据库----->右键(任务)----->生成脚本----->下一步----->下一步(高级)要编写脚本的数据类型---选择架构和数据 ...

  8. 链表相关的leetcode重要题目

    Leetcode 92:反转链表II 解决这道题需要三个步骤: 找到需要反转的第一个节点.可以通过头节点前进m-1步,找到反转开始的位置. 将需要反转的部分进行反转.参考Leetcode 206:反转 ...

  9. 参考整理papers(一)

    https://blog.csdn.net/qq_14845119/article/details/82219246 整理了OCR的论文,可以参考一下.还有一些相关论文 论文(poster):Scen ...

  10. 22万个木箱!TWaver 3D极限压榨

    打开个门户网站都千呼万唤,我们还能期待网页上的3D技术会有“酣畅淋漓”.“一气呵成”的感受吗?也许现在还差点火候.但是HTML5.WebGL等技术一直在飞速的发展,可能很快你就会惊讶它的能力.现在,我 ...