字符和字符串
字符变量包括字符型变量和字符串变量。
字符变量是用单撇号括起来的一个字符,如'a','x','?','$'等。
字符串变量是一对双撇号括起来的字符序列。如"Good Morning! ","a ","$34567"都是字符串变量。例如输出一个字符串如下:
cout<<"How do you do!";
明白了,字符变量只能有一个字符,是用单撇号括起来的。字符串变量可以有许多字符,是用双撇号括起来的。如'a'是一个字符变量,"a"是一个字符串变量。不能将字符常量与字符串常量混淆。可是'a'和"a"真正的区别在哪里呢?
每一个字符串的结尾有一个“字符串结束标志”,以便系统据此判断字符串是否结束。C++语言规定以字符'\0'作为字符串结束的标志,'\0'是一个ASCII码为0的字符,占一个字节。例如有一个字符串“Hello”,实际在内存中存储如图1.20所示。
图1.20
它占的内存不是5个字节,而是6个字节,最后一个字节为'\0'。但在输出时不输出'\0'。
又如,char a[]="abcd";cout<<sizeof(a);结果为5,因为有结束符'\0'。
在写字符串时不必加'\0',否则会画蛇添足。'\0'是系统自动加上的。字符串"a"实际包含2个字符:'a'和'\0',因此,把它赋给只能容纳一个字符的字符变量c="a"显然是不行的。如char a="a"是错误的。
字符变量是用来存放字符常量,请注意只能放一个字符。
字符变量的定义形式如下:
char c1,c2;
它表示c1和c2为字符型变量,各可以放一个字符,因此可以用下面语句对c1、c2赋值:
c1='a';c2='b';
字符数据在内存中实际是以该字符相对应的ASCII码存储,它的存储形式与整数的存储形式类似。这样使得字符型数据和整型数据可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出,还可以对它们进行算术运算。
ASCII码表请参见本书的附录部分。表1.4中列出了几个常用的码表值:
表1.4
下面的代码显示了字符变量与整数之间的通用性:
1 //字符变量与整数的通用性演示 2 # include <iostream> 3 using namespace std; 4 int main() 5 { 6 char c1,c2; 7 c1=65; //注意此处是数字 8 c2=66; //注意此处是数字 9 cout<<c1<<" "<<c2<<endl; //因为c1,c2为字符类型,所以输出也是字符 10 cout<<int(c1)<<" "<<int(c2)<<endl; //此处强制转化为数字输出 11 system("pause"); 12 return 0; 13 }
显示结果如图1.21所示。
图1.21
下例程序是大小写字母的转换。
1 //大小写字母转换 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char c1,c2; 8 c1='a'; 9 c2='b'; 10 c1=c1-32; 11 c2=c2-32; 12 cout<<c1<<' '<<c2<<endl; 13 system("pause"); 14 return 0; 15 }
运行结果为
A B
从ASCII码表中我们可以看到,每一个小写字母比它相应的大写字母的ASCII码大32。C++语言允许字符数据与整数直接进行算术运算。这种处理方法增大了程序的自由度。例如,对字符做各种转换就比较方便。
【例题描述】 恺撒加密术
古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒加密术”,它是一种替代密码,如图1.22所示,对于信件中的每个字母,会用它后面的第t个字母代替。例如当t=4时,“China”加密的规则是用原来字母后面第4个字母代替原来的字母,即字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。请编写一程序可将任意5个字符加密。
图1.22
1 //恺撒加密术 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 char c1='C',c2='h',c3='i',c4='n',c5='a'; 8 c1+=4; //即c1=c1+4; 9 c2+=4; 10 c3+=4; 11 c4+=4; 12 c5+=4; 13 cout<<c1<<c2<<c3<<c4<<c5<<endl; 14 system("pause"); 15 return 0; 16 }
【上机实践】 改进的加密术
请编写一个程序,在程序运行时输入任意5个字符,再输入任意一个值t(-8<t<8),则原先的5个字符将用其后面第t个字母代替并输出。
伪代码为
1 定义5个字符变量 2 定义t值 3 输入5个字符变量的值 4 输入t值 5 5个字符以其后面第t个字母代替 6 输出5个字符
C++还允许一种特殊形式的字符常量,就是以一个“\”开头的字符序列。例如前面我们已经用过的'\n',它代表一个“换行”符。这是一种“控制字符”,是不能在屏幕上显示的。在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。
表1.5所示是以'\'开头的特殊字符(转义字符)。
表1.5
通过转义字符,我们就可以在屏幕上输出诸如'\',''','"'之类的字符了。
注意,转义字符变量必须用单撇号括起来,不可用双撇号。双撇号用于字符串。
【上机实践】 输出特殊字符
请在屏幕上输出如图1.23所示的字符串,注:所有字符均为英文半角。
图1.23