字串
一段文字也可以是一個變數。 · ⏱ 約 25 分鐘
你會學到三件事
- 用
string 裝一整段文字
- 怎麼問它有多長、怎麼拿第幾個字
- 為什麼從 0 開始數
開始之前
到目前為止,文字都是寫死在 cout 裡的字面值:
cout << "Hello!" << endl;
而 char 一次只裝得下一個字元。這一課要裝一整段。
一、宣告一個字串
string name = "Semorphe";
cout << name << endl; // Semorphe
和 int age = 16; 是同一個形狀——只是型態換成 string,
裝的東西換成一段用雙引號包起來的文字。
第 2 課那條規則還是成立:雙引號是文字,單引號是一個字元。
二、問它有多長
cout << name.size() << endl; // 8
name.size() 這個寫法是新的:點 + 名字 + 一對括號。
意思是「去問 name 這個東西,它的 size 是多少」。
它跟 cout 不一樣——cout 是一個東西,而 size() 是對某個東西問的問題。
這個「點」的寫法之後會一直出現(v.push_back(...)、v.size()……),
現在只要記住:點的左邊是誰,右邊是問它什麼。
三、拿第幾個字
cout << name[0] << endl; // S
⚠️ [0] 拿到的是第一個字,不是第二個。
程式裡數東西從 0 開始:
S e m o r p h e
0 1 2 3 4 5 6 7 ← 位置
← 長度是 8,而最後一個的位置是 7
最後一個的位置永遠是「長度減一」。 這件事在陣列那一課會再遇到一次,
而它是初學者最常出錯的地方——寫 name[8] 會拿到不存在的東西。
四、接起來
name = name + "!";
cout << name << endl; // Semorphe!
+ 用在數字上是相加,用在字串上是接起來。同一個符號,兩種意思。
而這一行的形狀你已經見過了——第 5 課的 score = score + 5;:
先算右邊,再放回左邊。
完成的樣子
int main() {
string name = "Semorphe";
cout << name << endl;
cout << name.size() << endl;
cout << name[0] << endl;
name = name + "!";
cout << name << endl;
return 0;
}
換你了
印出這個字串的最後一個字。
提示:長度是 name.size(),而最後一個的位置比它小 1。
這一課你做了什麼
- 你用
string 裝了一整段文字
- 你學會了「點」的寫法:問一個東西某件事
- 你知道位置從 0 開始,而最後一個是「長度減一」
如果卡住了
| 你看到 |
多半是因為 |
| 印出來是空的或亂碼 |
位置超出範圍了(例如 name[8],而最大是 [7]) |
name.size 報錯 |
少了括號。它是一個問句,要寫成 size() |
用 + 接不起來 |
兩邊至少要有一邊是 string。"a" + "b" 兩個都是字面值,不行 |
| 中文字算出來的長度很怪 |
一個中文字佔好幾格。這一課先用英文 |
在編輯器打開這一課 →