- 算法競賽寶典(第一部):語言及算法入門
- 張新華
- 1568字
- 2021-03-19 19:27:43
字符和字符串
字符變量包括字符型變量和字符串變量。
字符變量是用單撇號括起來的一個字符,如'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
- UI設計基礎培訓教程
- Building Modern Web Applications Using Angular
- Arduino by Example
- Microsoft Dynamics 365 Extensions Cookbook
- JavaScript Unlocked
- Unreal Engine 4 Shaders and Effects Cookbook
- 前端HTML+CSS修煉之道(視頻同步+直播)
- Swift語言實戰精講
- JSP程序設計實例教程(第2版)
- Mastering Apache Storm
- jQuery for Designers Beginner's Guide Second Edition
- Mastering jQuery Mobile
- Drupal 8 Development:Beginner's Guide(Second Edition)
- INSTANT JQuery Flot Visual Data Analysis
- 算法超簡單:趣味游戲帶你輕松入門與實踐