中文字在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. js文件中引用其他js文件

    这一个功能的作用是做自己的js包时,可以通过引入一个整体的js文件而引入其他js. 只需要在总体的js加上这一句话 document.write("<script type='text ...

  2. Microsoft SQL Server学习(三)

    1.表:表示一个实体(客观存在的事物或抽象时间),可实现对实体的数据描述和数据操作. 2.表结构:二位平面(行.列) 3.数据类型: 类型名称 类型 整形 bit(只存储0.1) samllint i ...

  3. 小知识~清除系统盘的Hiberfil.sys

    Hiberfil.sys这个文件是系统休眠用的,时间长了你可能会占用几个G的磁盘空间,有时我们并不需要它,而又无法直接删除,这时,你可以使用CMD命令来关闭这个功能,关闭后,这个文件自动被删除. 1 ...

  4. 【笔记JS/HTML/CSS】web中的HTTP协议(1)

    最近都在coursera刷课,加上自己课业也忙起来了,总是忘记写学习笔记ORZ 自省ing... 在写HTML的时候,form表单需要通过HTTP协议向服务器提交.查询数据(如下图) 客户端通过HTT ...

  5. Linux 报错 ifconfig command not found

    1.Linux 中输入ifconfig命令报错:ifconfig command not found 有可能是没有安装ifconfig,如果没有,安装上去 2.查看是不是缺少了ifconfig,它是在 ...

  6. Flask框架 之request对象

    一.request对象属性 属性 说明 类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict args 记录请求中的查询参数 MultiDict co ...

  7. WINVER WIN32 WINNT

    WINVER 和 _WIN32_WINNT 请在WINDOWS.H前定义 从 Visual C++ 2008 开始,Visual C++ 不支持面向 Windows 95.Windows 98.Win ...

  8. Pytorch 加载保存模型【直播】2019 年县域农业大脑AI挑战赛---(三)保存结果

    在模型训练结束,结束后,通常是一个分割模型,输入 1024x1024 输出 4x1024x1024. 一种方法就是将整个图切块,然后每张预测,但是有个不好处就是可能在边界处断续. 由于这种切块再预测很 ...

  9. 【Redis】二、Redis高级特性

    (三) Redis高级特性   前面我们介绍了Redis的五种基本的数据类型,灵活运用这五种数据类型是使用Redis的基础,除此之外,Redis还有一些特性,掌握这些特性能对Redis有进一步的了解, ...

  10. 了解固态硬盘SSD,竟然如此简单!小白也能懂!

    https://www.youtube.com/watch?v=alb6-zp52mA