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”是一个字符,占一位宽度。