Last Updated on 2021-09-27 by Clay
string 是 C++ 標準模板函式庫(Standard Template Library, STL)中提供的字串容器,跟原本的 char 相比,可以輕鬆做到比較繁瑣的字串操作。
一個最簡單的例子是,原本使用 char 儲存數個字元的陣列,在接受更長長度的字串賦值時,需要先擴充該陣列的長度;然而在使用 string 的情況下,我們可以直接透過 assign()
賦值,而不用去考慮原先儲存字串的變數長度。
那以下就簡單介紹 string 的幾個基本使用方法。由於 string 的操作相當直覺,故應不需要太多的筆記篇幅。
- 基本操作
- length()
- clear()
- empty()
- assign()
- append()
- find()
string 基本操作
以下來看個 string 簡單的使用方法:
#include <iostream> #include <string> using namespace std; int main() { string s = "Today is a nice day."; // Print all sentence cout << s << endl; // Print every character for (auto c: s) { cout << c << endl; } return 0; }
Output:
Today is a nice day.
T
o
d
a
y
i
s
a
n
i
c
e
d
a
y
.
可以發現,string 型態的變數所儲存的字串,可以直接印出、也可以呼叫每一個字元。當然,除了使用 for-range 的方法印出外,也可以直接指定字串中儲存字符(Character)的編號。
比方說若要呼叫第一個字元 T,則可以使用以下程式碼:
cout << s[0] << endl;
Output:
T
length()
length()
是用來取得字串長度的函式。
#include <iostream> #include <string> using namespace std; int main() { string s = "Today is a nice day."; // length() cout << s.length() << endl; return 0; }
Output:
20
clear()
clear()
非常單純,就是將 string 變數直接清空。
#include <iostream> #include <string> using namespace std; int main() { string s = "Today is a nice day."; // Before cout << s << endl; // clear() s.clear(); // After cout << s << endl; return 0; }
Output:
Today is a nice day.
第二行不是我故意留白的 …… 而是因為印出了空字串。可以看到 clear()
函式確實清空了 string 儲存的字串。
empty()
empty()
是用來確認字串是否為空值。若是字串為空,返回 1;若字串不為空,則返回 0。
#include <iostream> #include <string> using namespace std; int main() { string s = "Today is a nice day."; // Before cout << s << s.empty() << endl; // clear() s.clear(); // After cout << s << s.empty() << endl; return 0; }
Output:
Today is a nice day.0
1
assign()
assign()
是用來賦值的函式,基本用法如下:
str_01.assign(str_02, START, NUM)
這是將 str_02 儲存的字串,從編號 START 的字元開始,指定 NUM 個字元賦值給 str_01。
#include <iostream> #include <string> using namespace std; int main() { string str_01; string str_02 = "Today is a nice day."; // assign() str_01.assign(str_02, 6, 100); // Print cout << str_01 << endl; return 0; }
Output:
is a nice day.
當然,實際上 str_02 並沒有 100 個字元,於是就一口氣 str_02 剩餘的字符都賦值了。
append()
append()
跟 assign()
很類似,不過是將 str_02 的字串直接加在 str_01 後頭,同樣可以指定開始點 START 以及字符數量 NUM。
#include <iostream> #include <string> using namespace std; int main() { string str_01 = "I want to go to play."; string str_02 = "Today is a nice day."; // append() str_01 += "\n"; str_01.append(str_02); // Print cout << str_01 << endl; return 0; }
Output:
I want to go to play.
Today is a nice day.
可以發現,其實也可以使用 + 來串接字串。
References
- http://www.cplusplus.com/reference/string/string/
- https://www.w3schools.com/cpp/cpp_strings.asp
- https://www.programiz.com/cpp-programming/strings