熱門文章

2023年7月31日 星期一

Python 及 C++ 字串處理

作者:王一哲
日期:2023年7月31日



前言


以下的內容包含
  1. 取得字串長度
  2. 判斷字串是否為空字串
  3. 比較字串內容是否相等
  4. 複製字串
  5. 連接字串
  6. 改變字串內容



取得字串長度


Python 語法


語法為
len(字串名稱)
回傳值格式為 int,例如
s = "abcde"
print(len(s))
印出的值為5。

C++ 語法


需要先引入函式庫 string,取得字串長度的語法有兩種
字串名稱.size();
字串名稱.length();
回傳值格式為沒有正負號的整數 sizt_t,例如
#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() 以外的部分。


判斷字串是否為空字串


Python 語法


方法1是利用字串長度,空字串的長度為0,例如
s = ""
if len(s) == 0: print("s is empty.")
else: print("len(s) = {:d}".format(len(s)))

方法2是直接將字串物件丢到 if 中,如果字串中有內容為 True,如果是空字串為 Fasle。以下的程式碼第2行在 s 前面加上 not,是為了要讓空字串觸發 if 條件成立的程式碼,加上 not 將布林值反過來。
s = ""
if not s: print("s is empty.")
else: print("len(s) = {:d}".format(len(s)))


C++ 語法


方法1是利用字串長度,空字串的長度為0,可以用 size() 或是 length() 取得字串長度,例如
string s = "";
if (s.size() == 0) {
    cout << "s is empty." << endl;
} else {
    cout << "The length of s is " << s.size() << endl;
}

方法2是利用 empty(),語法為
字串名稱.empty();
若為空字串回傳 1,若字串有內容回傳 0。以下的程式碼第2行在 s.empty() 前面加上 !,是為了要讓空字串觸發 if 條件成立的程式碼,加上 ! 將布林值反過來。
string s = "";
if (!s.empty()) {
    cout << "s is empty." << endl;
} else {
    cout << "The length of s is " << s.size() << endl;
}



比較字串內容是否相同


Python 語法


使用 == 即可,若兩個字串內容相同回傳 True,若兩個字串內容不相同回傳 False,例如
s1 = "abcde"
s2 = "abcde"
s3 = "bcde"
print(s1 == s2)  # 印出的值為 True
print(s1 == s3)  # 印出的值為 False


C++ 語法



使用 == 即可,若兩個字串內容相同回傳 1,若兩個字串內容不相同回傳 0,例如
string s1 = "abcde", s2 = "abcde", s3 = "abcd";
cout << (s1 == s2) << endl;  // 印出的值為 1
cout << (s1 == s3) << endl;  // 印出的值為 0



複製字串


Python 語法


使用 = 即可,可以配合索引值複製字串中的部分內容,例如
s1 = "abcde"
s2 = s       # s2 內容為 abcde
s3 = s[1:4]  # s3 內容為 bcd,由索引值 1 開始,不包含結尾索引值 4 的內容
s4 = s[:4]   # s4 內容為 abcd,由索引值 0 開始,不包含結尾索引值為 4 的內容
s5 = s[1:]   # s5 內容為 bcde,由索引值 1 開始直到字串結尾


C++ 語法


使用 = 即可,可以配合 substr 複製字串中的部分內容,substr 的語法為
字串名稱.substr(起點索引值, 取出的字串長度);
取出的字串長度可以省略,預設值為取到字串結尾處。例如
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 開始直到字串字串結尾



連接字串


Python 語法


使用 + 即可,例如
s1 = "abcde"
s2 = "fghij"
s3 = s1 + s2  # s3 內容為 abcdefghij


C++ 語法


使用 + 即可,例如
string s1 = "abcde", s2 = "fghij";
string s3 = s1 + s2;  // s3 內容為 abcdefghij



改變字串內容


Python 語法


由於 Python 的字串物件無法改變內容,如果用以下的語法會出錯
s = "abcde"
s[0] = "f"

正確的語法是用 + 並配合索引值取出要留下的字串內容,重新定義要改變內容的字串物件,例如
s = "abcde"
s = "f" + s[1:]  # s 內容為變為 fbcde


C++ 語法


C++ 的語法有兩種,方法1是配合索引值取代字串內容,輸入的內容格式為字元 (char),記得要用單引號,例如
string s = "abcde";
s[0] = 'f';  // s 內容為變為 fbcde

方法2是用 + 並配合 substr 取出要留下的字串內容,例如
string s = "abcde";
s = "f" + s.substr(1);  // s 內容為變為 fbcde



結語


以上是我目前常用到的字串處理內容,如果之後有遇到其它需求會再補充內容。



HackMD 版本連結:https://hackmd.io/@yizhewang/ryjVpoVsh

沒有留言:

張貼留言