# Python 及 C++ 字串處理 > 作者:王一哲 > 日期:2023年7月31日 ## 前言 以下的內容包含 1. 取得字串長度 2. 判斷字串是否為空字串 3. 比較字串內容是否相等 4. 複製字串 5. 連接字串 6. 改變字串內容 <br /> ## 取得字串長度 ### Python 語法 語法為 ```python len(字串名稱) ``` 回傳值格式為 int,例如 ```python s = "abcde" print(len(s)) ``` 印出的值為5。 <br /> ### C++ 語法 需要先引入函式庫 string,取得字串長度的語法有兩種 ```cpp 字串名稱.size(); 字串名稱.length(); ``` 回傳值格式為沒有正負號的整數 sizt_t,例如 ```cpp= #include <iostream> #include <string> using namespace std; int main() { string s = "abcde"; cout << s.size() << endl; cout << s.length() << endl; return 0; } ``` 兩種寫法印出的值都是5。接下來的文章中,C++ 的程式碼都會省略 int main() 以外的部分。 <br /> ## 判斷字串是否為空字串 ### Python 語法 方法1是利用字串長度,空字串的長度為0,例如 ```python s = "" if len(s) == 0: print("s is empty.") else: print("len(s) = {:d}".format(len(s))) ``` <br /> 方法2是直接將字串物件丢到 if 中,如果字串中有內容為 True,如果是空字串為 Fasle。以下的程式碼第2行在 s 前面加上 not,是為了要讓空字串觸發 if 條件成立的程式碼,加上 not 將布林值反過來。 ```python s = "" if not s: print("s is empty.") else: print("len(s) = {:d}".format(len(s))) ``` <br /> ### C++ 語法 方法1是利用字串長度,空字串的長度為0,可以用 size() 或是 length() 取得字串長度,例如 ```cpp string s = ""; if (s.size() == 0) { cout << "s is empty." << endl; } else { cout << "The length of s is " << s.size() << endl; } ``` <br /> 方法2是利用 empty(),語法為 ```cpp 字串名稱.empty(); ``` 若為空字串回傳 1,若字串有內容回傳 0。以下的程式碼第2行在 s.empty() 前面加上 !,是為了要讓空字串觸發 if 條件成立的程式碼,加上 ! 將布林值反過來。 ```cpp string s = ""; if (!s.empty()) { cout << "s is empty." << endl; } else { cout << "The length of s is " << s.size() << endl; } ``` <br /> ## 比較字串內容是否相同 ### Python 語法 使用 **==** 即可,若兩個字串內容相同回傳 True,若兩個字串內容不相同回傳 False,例如 ```python s1 = "abcde" s2 = "abcde" s3 = "bcde" print(s1 == s2) # 印出的值為 True print(s1 == s3) # 印出的值為 False ``` <br /> ### C++ 語法 使用 **==** 即可,若兩個字串內容相同回傳 1,若兩個字串內容不相同回傳 0,例如 ```cpp string s1 = "abcde", s2 = "abcde", s3 = "abcd"; cout << (s1 == s2) << endl; // 印出的值為 1 cout << (s1 == s3) << endl; // 印出的值為 0 ``` <br /> ## 複製字串 ### Python 語法 使用 **=** 即可,可以配合索引值複製字串中的部分內容,例如 ```python s1 = "abcde" s2 = s1 # s2 內容為 abcde s3 = s1[1:4] # s3 內容為 bcd,由索引值 1 開始,不包含結尾索引值 4 的內容 s4 = s1[:4] # s4 內容為 abcd,由索引值 0 開始,不包含結尾索引值為 4 的內容 s5 = s1[1:] # s5 內容為 bcde,由索引值 1 開始直到字串結尾 ``` <br /> ### C++ 語法 使用 **=** 即可,可以配合 substr 複製字串中的部分內容,substr 的語法為 ```cpp 字串名稱.substr(起點索引值, 取出的字串長度); ``` 取出的字串長度可以省略,預設值為取到字串結尾處。例如 ```cpp string s1 = "abcde"; string s2 = s1; // s2 內容為 abcde string s3 = s1.substr(1, 3); // s3 內容為 bcd,由索引值 1 開始,取出字串的長度為 3 string s4 = s1.substr(0, 4); // s4 內容為 abcd,由索引值 0 開始,取出字串的長度為 4 string s5 = s1.substr(1); // s5 內容為 bcde,由索引值 1 開始直到字串字串結尾 ``` <br /> ## 連接字串 ### Python 語法 使用 **+** 即可,例如 ```python s1 = "abcde" s2 = "fghij" s3 = s1 + s2 # s3 內容為 abcdefghij ``` <br /> ### C++ 語法 使用 **+** 即可,例如 ```cpp string s1 = "abcde", s2 = "fghij"; string s3 = s1 + s2; // s3 內容為 abcdefghij ``` <br /> ## 改變字串內容 ### Python 語法 由於 Python 的字串物件無法改變內容,如果用以下的語法會出錯 ```python s = "abcde" s[0] = "f" ``` 正確的語法是用 **+** 並配合索引值取出要留下的字串內容,重新定義要改變內容的字串物件,例如 ```python s = "abcde" s = "f" + s[1:] # s 內容為變為 fbcde ``` <br /> ### C++ 語法 C++ 的語法有兩種,方法1是配合索引值取代字串內容,輸入的內容格式為字元 (char),記得要用單引號,例如 ```cpp string s = "abcde"; s[0] = 'f'; // s 內容為變為 fbcde ``` <br /> 方法2是用 **+** 並配合 substr 取出要留下的字串內容,例如 ```cpp string s = "abcde"; s = "f" + s.substr(1); // s 內容為變為 fbcde ``` <br /> ## 結語 以上是我目前常用到的字串處理內容,如果之後有遇到其它需求會再補充內容。 --- ###### tags:`C++`、`Python`