You are on page 1of 22

字串

 使用陣列之字串
 string 類別的使用
使用陣列之字串
字串宣告
 字串常數是指用雙引號 " 括起來的文

字,例如 "hello world"


 最短的字串常數是空字串 ""

 使用陣列之字串的宣告格式

char 字串名稱 [ 長度 ];
 例如宣告一個長度為 20 個字元的字串
char str[20];
字串宣告

1. 宣告使用陣列之字串,需指定陣列大小

2. 字串使用隱藏的空字元 '\0' ,作為結束符號

3. 若指定陣列大小,字串的最大長度是
陣列大小 -1 ,因為最後一個元素儲存空字元
字串初始化

1. 使用字串常數初始化的格式如下,陣列
內的長度可以省略

2. 例如
字串初始化

3. 省略宣告陣列的大小,編譯器會自動計
算字串長度,配置適當的記憶體給字串,
避免陣列大小宣告不足的問題
4. 宣告與初始化字元或字串時,應注意其
差別
字串輸入與輸出

1. cin, cout 字串時,可直接使用字元陣列


的名稱
2. 例如宣告一個字串 char str[31];
cin >> str; // 可輸入 30 (31-1) 個字

cout << str;
3. cin 會把換行、空格、 tab 等空白當成
字串的結束。所以要一次讀取一串包含
空白的資料可使用
cin.getline( 字串名稱 , 長度 );
字串輸入與輸出

4. 字母小寫轉大寫可使用 toupper() 函

字母大寫轉小寫可使用 tolower() 函

字串輸入與輸出

5. 空字元 '\0' 的 ASCII 碼為 0 ,所以


直接使用數值 0 作為字串的結尾

6. 可使用字元值是否為 0 ,作為判斷字
串是否結束
字串的操作

1. 字串長度是由空字元的位置決定,不是
陣列大小決定的
2. 縮短字串時,可在要截斷的位置上,將
此元素指定成空字元 '\0' 。例如
char myword[wordlen] = "C++ program";
myword[3] = '\0';
myword 會變成 "C++"
字串的操作

3. 要更改字串的內容時,可改變陣列元素
的值。例如
char myword[wordlen] = "C++ program";
myword[0]='H';
myword[1]='i';
myword[2]='\0';
myword 會變成 "Hi"
字串的操作

4. 字串要進行長度計算、比對、串接等操
作時,可使用字串函數來處理,使用前,
要引入 <cstring> 或 <string.h>
字串的操作
string 類別的使用
 C++ 增強了字串的操作,內建標準函式
庫的 string 類別( class ),可用來定
義變數,用法就和 char 、 int 等資料
型態一樣,比較直覺
 使用 string 類別前,要先引入
<string> 標頭檔
string 類別的使用
1. 定義字串

string s3("abc"); // 用 abc 建立字串 ( 速


度最快 )
2. 輸入輸出字串

3. 字串比較
由左至右逐字元比較字元的 ASCII 碼
string 類別的使用

4. 連接字串

5. 計算字串長度
string 類別的使用

6. 插入字串

7. 刪除字串
string 類別的使用

8. 提取字串

9. 搜尋字串
string 類別的使用

10. 讀取字串
1) cin
讀取一個字串,把空白當成字串的結束
2) cin.getline ( 字串名稱 , 長度 )
讀取一串包含空白,有最大長度的字
串,把 enter 當成字串的結束
3) getline (cin, 字串名稱 )
讀取一串包含空白,長度不固定的字
串,把 enter 當成字串的結束
string 轉換
 將基本資料型別轉成 C++ string
string vtos = std::to_string(value);

 將 string 轉成 C 字串
string s("123");
char x[10];
strcpy(x,s.c_str());
練習題
 練習題 a009- 解碼器
 練習題 a011- 幼稚園的算數遊戲 算一算每行有幾個字
( word )。 Word 的定義是連續的字元( letter: A~Z a~z )所組成的
字。
 練習題 a022- 迴文
 練習題 d235: Q10929: You can say 11 判斷 11 的倍數
 練習題 d353- 幼稚數列 1 11 21 1112 3112 211213
 練習題 a020- 身份證檢驗
 練習題 a038- 數字翻轉 12345 -> 54321
 練習題 a135: 12250 - Language Detection 比較字串
 練習題 a054: 電話客服中心 身分證字號 求第一個字母的可能性
 練習題 a065: 提款卡密碼 字元的距離
 練習題 a149- 乘乘樂 345=>3*5*6=90
 練習題 d392- 讀取練習 - 強大的加法 2 3 4 =>2+3+4
 練習題 d098-Stringstream 運用練習
 練習題 d086: 態度之重要的證明
 練習題 d124: 3 的倍数 將每個數字相加是否為 3 的倍數
 練習題 a224: 明明愛明明 如果重新安排順序後,有辦法讓這一堆英文
字母變成迴文的話,輸出「 yes ! 」,否則輸出「 no... 」。
練習題
 練習題 d066: 上學去吧! 17:00 判斷上下學
 練習題 c015: Reverse and Add 字串轉數字,數字轉字串,判斷
數字迴文,不能使用 itoa ,因 g++ 沒有此函式
 練習題 c045:acm490 Rotating Sentences string 轉 90 度
 練習題 c007:acm 272 TeX Quotes string 個別字元比較,跳脫字
元使用
 練習題 c054:acm-10082 WERTYU 字元使用鍵盤向左轉換一個
字元,跳脫字元
 練習題 d107: NOIP 2008 1. 笨小猴 字元、出現次數、質數判斷
 練習題 d139: Compressed String 字元、出現次數
 練習題 c091:acm-576 Hiaku Review aeiouy 個數,是否相連
 練習題 a275: 字串變變變 使用字元陣列效率高於 string 類別
 練習題 d632: C and S 二進位加法
 練習題 d351: 10878 - Decode the tape getline 與 ASCII ,注意不
能多 endl
 練習題 acm-10183 - How Many Fibs?
 練習題 d681: BinaryCount
練習題
 練習題 uva-10189 Minesweeper 踩地雷計算每點鄰近點的地雷

 練習題 uva 10010 - Where's Waldorf 找出字串位於二維字串陣
列所在位置,字串可以八個方向比較
 練習題 uva 10252 Common Permutation 計算兩個字串字母出現
頻率,找出字母頻率較小的。
 練習題 uva 10188 Automated Judge Script 跨行數字也要一起
看,若次序一樣就是 PE
 練習題 c014-uva 10035 Primary Arithmetic 計算兩數相加 carry
次數,數字位數較少左側補 0 ,再進行字串模擬加法運算。
 練習題 a466: 12289 - One-Two-Three one two three 其中一個字
母錯誤
 練習題 d267: 11577 - Letter Frequency 字串出現頻率
 練習題 a130: 12015 - Google is Feeling Lucky 字串輸入 找最大

 練習題 d041: 11219 - How old are you? 計算年紀
 練習題 uva- Palindromes 檢查迴文與鏡射文字
 練習題 uva1584 - Circular Sequence 找出最小字典順序的字串

You might also like