第5講 字符串
字符串是計算機與人類溝通的重要手段
1. 字符與整數(shù)的聯(lián)系——ASCII碼
每個常用字符都對應一個0?~ 127的數(shù)字,二者之間可以相互轉化。注意:目前負數(shù)沒有與之對應的字符。(循環(huán)打表看字符)

常用ASCII值:'A'- 'Z'是65 ~ 90,'a' - 'z'是97 - 122,0 - 9是 48 - 57。 (大小寫相差32)
字符可以參與運算,運算時會將其當做整數(shù),只有輸出時才是字符:
練習:輸入一行字符,統(tǒng)計出其中數(shù)字字符的個數(shù),以及字母字符的個數(shù)。
2. 字符數(shù)組
字符串就是字符數(shù)組加上結束符'\0'。
可以使用字符串來初始化字符數(shù)組,但此時要注意,每個字符串結尾會暗含一個'\0'字符,因此字符數(shù)組的長度至少要比字符串的長度多1!
2.1 字符數(shù)組的輸入輸出:
讀入字符數(shù)組,包括空格:
讀入字符串,包含空格:
2.2 字符數(shù)組的常用操作
下面幾個函數(shù)需要引入頭文件:
(1) strlen(str),求字符串的長度,不包含”\0“
(2) strcmp(a, b),比較兩個字符串的大小,a < b返回-1,a == b返回0,a > b返回1。這里的比較方式是字典序! (字典序:“10”>“2“)基于貪心
(3) strcpy(a, b),將字符串b復制給從a開始的字符數(shù)組。
2.3 遍歷字符數(shù)組中的字符:
練習:給定一個只包含小寫字母的字符串,請你找到第一個僅出現(xiàn)一次的字符。如果沒有,輸出no。
練習:把一個字符串中特定的字符全部用給定的字符替換,得到一個新的字符串。
3. 標準庫類型string
可變長的字符序列,比字符數(shù)組更加好用。需要引入頭文件:
3.1 定義和初始化
3.2 string上的操作
(1) string的讀寫:
注意:不能用scanf讀入,不能用printf直接輸出string,需要寫成:printf(“%s”, s.c_str());
(2) 使用getline讀取一整行
(3) string的empty和size操作(注意size是無符號整數(shù),因此 s.size() <= -1一定成立):
注意:strlen()是On的,但size()是O1的,length()和size()完全一樣
(4) string的比較:
(5) 為string對象賦值:
(6) 兩個string對象相加: 可以累加
(7) 字面值和string對象相加:做加法運算時,字面值和字符都會被轉化成string對象,因此直接相加就是將這些字面值串聯(lián)起來:
當把string對象和字符字面值及字符串字面值混在一條語句中使用時,必須確保每個加法運算符的兩側的運算對象至少有一個是string:
3.3 處理string對象中的字符
可以將string對象當成字符數(shù)組來處理:
或者使用基于范圍的for語句:
練習:密碼翻譯,輸入一個只包含小寫字母的字符串,將其中的每個字母替換成它的后繼字母,如果原字母是'z',則替換成'a'。
練習:輸入兩個字符串,驗證其中一個串是否為另一個串的子串。
注意
string?substr(i, len) 截取字符串 包左不包右 substr(i)從當前位置截取到最后
功能:從一個字符串復制一個從指定位置開始,并具有指定長度的子字符串。
