C++程序设计与案例分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 字符型数据

1. 字符常量

字符常量是用一对单引号括起来的一个字符,如'x','A','5','?','$'等都是字符常量。注意,'a'和'A'是不同的字符常量。

2. 转义字符

有一些字符是不可显示的字符,或无法通过键盘输入的字符,如换行、制表符、响铃、回车等。这样的字符常量该如何写到程序中呢?C++提供了一种称为转义序列的表示方法来表示这些字符,就是以字符“\”开头的字符序列。

表2-2列出了C++预定义的转义序列。

表2-2 C++预定义的转义序列

无论是不可显示字符还是一般字符,都可以用十六进制或八进制 ASCII 码来表示。表示形式是:

          \ddd      八进制形式
          \xddd     十六进制形式

其中,ddd表示三位八进制或十六进制数。

例如,字符a的十六进制ASCII码是61,于是字符常量'a'也可以表示成'\x61'。

字符数据在内存中是以 ASCII 码的形式存储的,与整数的存储形式类似。这样,在C++中字符型数据就可以和整型数据通用,一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量;也可以对字符型数据进行算术运算,此时相当于对它们的 ASCII 码进行算术运算。但是,应该注意的是:字符型数据只用一个字节存储,所以只能存放0~255范围内的整数。

3. 字符变量

用数据类型符号char或unsigned char声明的变量就是字符型变量,一个字符型变量中只能放一个字符,不能放一个字符串,例如:

          char  c1,c2;            //声明两个字符型变量c1,c2

4. 字符串常量

字符串常量简称字符串,是用一对双引号括起来的字符序列,如"abcd"、"123"、"China"、"a"、"This is a string."等都是字符串常量。由于双引号是字符串的界限符,所以字符串本身包含的双引号就要用转义序列来表示,如"Please enter \"Yes\" or \"No\""表示的如下字符串常量:

          Please enter "Yes" or "No"

注意:字符串与字符是不同的,字符串在内存中的存放形式是按串中字符的排列次序顺序存放的,每个字符占一个字节的存储空间,并在末尾增加一个字节用来存放’\0’作为字符串的结束标记。图2-1是字符串与字符的存储形式,从图中我们可以看出,字符串"a"和字符'a'是不同的。

图2-1 字符串与字符的存储形式

5. 应用举例

【例2.4】 字符串"abcdefghijk"的长度是______;而字符串"abcd\012efg\x12hijk"的长度是______。

答案:11 13

分析:字符串的长度是其中字符的个数,但转义序列整体是一个字符,所以“\012”是一个字符,占一位宽度,而“\x12”是一个字符,占一位宽度。