C++语言零基础入门教程:4.8 字符类型的编程应用分析

2778 人浏览 | 时间: 2016-08-11 23:50:58 | 作者: codexia 会员文章,禁止转载

    在4.6和4.7节中,我们讲述了字符类型的来龙去脉以及基本数据类型的动态模型,来加深了对数据类型的理解。那么本节我们将进一步来解释字符类型在编程中的应用分析。
    如果只工作在英文字符界面,所有的提示和显示内容都是英文单词和英文的标点符号,我们只需要单字节表示的字符,即窄字符。而如果我们要显示汉字这样的字符,以及汉子标点符号,那么单字节无法表示我们国家的字符了。所以要使用两个字节。
    单字节字符我们用关键字char表示字符类型,双字节的字符用wchar_t表示一个字符。双字节字符一个字符占两个字节哦。这也是我们平常说一个汉字等于两个英文字符的大小的原因。那么,英文字符可不可以用两个字节来表示呢?当然可以。但是英文字符数量有限,一个字节已经够了,那么多出来的一个字节,全是0。不要以为这样的做法没有意义哦,在Unicode字符集编码中,最小编码的就是美国英文字符,也就是我们常常听说的ASCII字符编码表。因为所有这些字符一个字节就表示完了,所以另外一个字节就没东西可放了,就留空了。
    为什么空着还要保留这个字节呢?因为在标准的Unicode编码规则中,统一用两个字节存储一个字符,所以即使用不了,你空着就行了。这样在存储形式上简单统一,在字符处理的时候,就方便。而且,在判断中文和英文字符时,我们就可以利用第一个字节是否为0,就可以辨别中文和英文字符了。
    那么你想到的用不着两个字节的ASCII字符就用一个字节,用得着的汉子就用两个字节,这样岂不是更加节省内存。是的!你真聪明,这就是多字节字符集。
    默认情况下,我们在C++控制台代码中,使用字符串的时候,直接中文英文混用了。默认的,编译器就会按照多字节字符集来存储和读取这些字符串了。

    下面简单看看Unicode和多字节字符集如何存储字符的,如下图所示:

Unicode和多字节字符集如何存储字符的

    可以看到,Unicode确实比较浪费内存。上述所示的数值是十六进制的字符编码值,也就是字符在内存中存储的实际形式。你在内存中只看得到数字,看不到字符哦。

    Unicode形式的字符我们用wchar_t。如果用多字节字符集,我们直接用char。上图用代码表示如下:


void main()
{
    wchar_t *pwChar = L"AA";//unicode版
    char * pChar = "A你B";//多字节字符集版
}
     我们这里使用了字符指针,指向一个字符串。图中并没有标注结尾的空字符,这里特别提示一下。我们这里讲字符,暂时不要管字符串,后面会讲的。
#include <tchar.h>//要使用中性字符宏等,就要包含这个头文件
void main()
{
    TCHAR ch =_T(‘A’);
}
     而TCHAR的使用就和char一样,没有差别。只不过,第一次见过会比较陌生。
char ch = 65;//ch输出显示的字符就是字符A
char ch2 = 'A';//直接赋值一个字符A也是一样的
     那么字符类型介绍到这里也差不多了。重点在于背景知识介绍,语法本身非常简单,随便看哪一本C++编程入门书都有介绍。而我们教程这里介绍的内容,是绝无仅有的。才是最有价值的地方。
当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。