中文字在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. LN : leetcode 515 Find Largest Value in Each Tree Row

    lc 515 Find Largest Value in Each Tree Row 515 Find Largest Value in Each Tree Row You need to find ...

  2. jQuery伪分页效果

    如图,我们首先分析在一个页面存放4条内容,其余的超出隐藏(因为这里没有后台数据,所以我们把内容‘写死’),然后就是下面两个按钮(这里我们不用button,因为button有自带的提交功能),然后我们可 ...

  3. OC语言Block

    OC语言Block 一.Block (一)简介  Block是什么?苹果推荐的比较特殊的数据类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. Block和 ...

  4. iOS App Crash原理分析

    预备知识:OS X系统分析 1.内核XNU是Darwin的核心,也是整个OS X的核心.XNU本身由以下几个组件构成: Mach微核心 BSD层 libKern I/O Kit 此外,内核是模块化的, ...

  5. Python-Day07-图形用户界面和游戏开发

    Python-100Day-学习打卡Author: Seven_0507Date: 2019-05-22123 文章目录Python图形用户界面和游戏开发1. tkinter模块2. Pygame进行 ...

  6. catkin_package()是什么意思?

    DEPENDS 和 CATKIN_DEPENDS 用来告诉 catkin 需要将你程序包A的哪些依赖项传递给使用 find_package(...) 查找你的程序包的程序包B. 而在CMakeList ...

  7. Beta冲刺提交-星期四

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 <作业要求的链接> 团队名称 唱跳RAP编程 这个作业的目标 1.进行每日例会,每个成员汇报自己今天完成     的工作,PM安排明天的 ...

  8. getBlockTable delete pline

    AcDbBlockTable *pBlkTab; Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase() ...

  9. Spring框架系列(七)--Spring常用注解

    Spring部分: 1.声明bean的注解: @Component:组件,没有明确的角色 @Service:在业务逻辑层使用(service层) @Repository:在数据访问层使用(dao层) ...

  10. Description Resource Path Location Type Missing artifact com.********:framework:jar:1.0.2 pom.xml /项目名 line **** Maven Dependency Problem

    问题具体描述如下图所示: 对于该问题本人是这么解决的. 在window下[Preferences]目录找到[Maven]下的[usersetting] 查看local repository 里面的路径 ...