官术网_书友最值得收藏!

字符和字符串

字符變量包括字符型變量和字符串變量。

字符變量是用單撇號括起來的一個字符,如'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

主站蜘蛛池模板: 漳州市| 防城港市| 富宁县| 洛浦县| 临潭县| 大埔区| 五台县| 全椒县| 陇南市| 札达县| 金山区| 兰坪| 甘孜县| 云安县| 如东县| 基隆市| 泽库县| 军事| 花垣县| 册亨县| 宿州市| 武强县| 新野县| 上饶市| 商都县| 阳曲县| 甘南县| 正蓝旗| 和平区| 克什克腾旗| 江孜县| 合阳县| 饶河县| 当雄县| 都匀市| 夹江县| 上饶市| 慈利县| 平果县| 孟津县| 大名县|