###### tags: `FoShiShi` # 字串 ## What 字串就是一串的字元 可以想成是 **存字元的陣列** 但跟字元陣列有一些不一樣的地方 例:動態的長度、子功能眾多 ## When 當要存一個字串 例:句子、名字 --- ## How 跟[**`陣列`**](https://chrislaiisme.github.io/FoShiShi/array)的語法大致相同 只是有更多的功能可以去使用  :::warning 字串的 **引入值從`0`開始** ::: ### 宣告 ```cpp= string 字串名稱; ``` 其中字串長度可以不用先定義(**可以動態調整**) ### 引用字串中字元 ```cpp= 字串名稱[位置]; ``` 其中要引用的位置(`pos`)必須在符合`0 <= pos < 陣列長度` :::info 陣列不能夠直接輸入/輸出 但**字串可以直接輸入/輸出** 也就是 ```cpp= string str; cin >> str; ``` 是合法的 ::: --- ### 各種字串操作 **字串可以直接輸入/輸出** 還有一堆函式可以用 甚至可以直接用加法來加字串 #### 輸入/輸出 上面有講可以直接輸入/輸出 ```cpp= string str; cin >> str; cout << str << endl; ``` #### 各種函式 字串跟字元陣列的不同之一 字串有一堆子功能可以去用 (以下之字串名稱皆為`str`) `str.length() or str.size()`:回傳**字串長度** `str.empty()`:回傳**字串是否為空**(字串長度是否為0) `str.clear()`:把`str`設為空(**清空`str`**) `str.push_back(chr) (chr是字元型態)`:把`chr`字元**從`str`尾端加入** #### 字串加法 ```cpp= string str = "aaa", str2 = "bbb"; string str3 = str + str2; cout << str3 << endl; // aaabbb string str4 = str2 + 'c'; cout << str4 << endl; // bbbc ``` 字串可以在後面加上字串 也可以在後面加上字元 ## 實際應用 ### 題目1 輸入一字串`str` 再輸入兩數`a, b`(`a <= a <= b < str.length()`) 請輸出`str`的第`a`項到第`b`項 :::spoiler solution 用迴圈去依次輸出`str[a] ~ str[b]` ```cpp= #include<iostream> using namespace std; int main() { string str; int a, b; cin >> a >. b; for(LL i = a; i <= b; i ++ ) { cout << str[i]; } cout << endl; } ``` ::: ### 題目2 輸入兩字串`str, str2` 請輸出`str`長度,`str2`長度 定`str3`為`str`後面加上`str2`並輸出`str3` 再在此字串後面加上`'a'`並輸出之 :::spoiler solution 就各種操作 ```cpp= #include<iostream> using namespace std; int main() { string str, str2; cin >> str >> str2; cout << str.length() << endl; cout << str2.length() << endl; string str3 = str + str2; cout << str3 << endl; str3 += 'a'; cout << str3 << endl; } ``` :::
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up