Semorphe

字串

一段文字也可以是一個變數。 · ⏱ 約 25 分鐘

你會學到三件事

  1. string 裝一整段文字
  2. 怎麼問它有多長、怎麼拿第幾個字
  3. 為什麼從 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。

這一課你做了什麼

如果卡住了

你看到 多半是因為
印出來是空的或亂碼 位置超出範圍了(例如 name[8],而最大是 [7]
name.size 報錯 少了括號。它是一個問句,要寫成 size()
+ 接不起來 兩邊至少要有一邊是 string"a" + "b" 兩個都是字面值,不行
中文字算出來的長度很怪 一個中文字佔好幾格。這一課先用英文
在編輯器打開這一課 →