std::string 封裝動態字符數組,提供自動記憶體管理、豐富操作介面、運算符重載,完全替代 C 風格字符串(char*/char[])。需包含 <string>。
string s1; // 空串 ""
string s2 = "c plus plus"; // C 串初始化
string s3 = s2; // 拷貝構造
string s4(5, 's'); // 5 個 's' → "sssss"
string s5(s2, 2, 4); // 從 s2[2] 取 4 字符
string s6("hello", 3); // 前 3 字符 → "hel"
\0 結束符string s = "https://c.biancheng.net"; int len = s.length(); // 或 s.size() → 22 // 不含結束符,返回真實字符數
c_str()string path = "D:\\demo.txt"; FILE* fp = fopen(path.c_str(), "rt"); // 返回 const char*
string s; cin >> s; // 讀取至空白字符 (空格/換行/製表) cout << s;
注意:cin >> s 遇空白停止。讀取整行需用 getline(cin, s)。
string s = "1234567890"; for (int i=0; i<s.length(); ++i) cout << s[i] << ' '; // 1 2 3 4 5 6 7 8 9 0 s[5] = '5'; // 修改第 6 字符 → "1234557890"
+ / += 運算符string s1 = "first ", s2 = "second "; char* s3 = "third "; char s4[] = "fourth "; char ch = '@'; string s5 = s1 + s2; // string + string string s6 = s1 + s3; // string + char* string s7 = s1 + s4; // string + char[] string s8 = s1 + ch; // string + char // 結果: "first second ", "first third ", "first fourth ", "first @"
insert()string s1 = "1234567890", s2 = "1234567890", s3 = "aaa"; s1.insert(5, s3); // 位置 5 插入 s3 → "12345aaa67890" s2.insert(5, "bbb"); // 位置 5 插入 C 串 → "12345bbb67890" // 越界拋出 out_of_range 異常
erase()string s1 = "1234567890", s2 = s1, s3 = s1; s2.erase(5); // 從 5 刪至末尾 → "12345" s3.erase(5, 3); // 從 5 刪 3 字符 → "1234590" // len 參數自動截取至末尾,不會越界
substr()string s1 = "first second third"; string s2 = s1.substr(6, 6); // 位置 6 長度 6 → "second" // pos 越界拋異常,len 越界截取至末尾
| 函數 | 功能 | 返回 |
|---|---|---|
find(str, pos) | 從 pos 向後找子串首次出現 | 位置或 npos(-1) |
rfind(str, pos) | 從 pos 向前找子串末次出現 | 位置或 npos |
find_first_of(str) | 找 str 中任一字符在串中首次出現 | 位置或 npos |
find_last_of(str) | 找 str 中任一字符在串中末次出現 | 位置或 npos |
find_first_not_of(str) | 找不在 str 中的字符首次出現 | 位置或 npos |
find_last_not_of(str) | 找不在 str 中的字符末次出現 | 位置或 npos |
string s1 = "first second third"; string s2 = "second"; int pos = s1.find(s2, 5); // 從 5 開始找 → 6 if (pos != string::npos) cout << "Found at " << pos;
compare():字典序比較(同 strcmp)replace():替換子串append():尾部追加(同 +=)clear():清空empty():判空c_str()/data():取 C 串指針begin()/end():迭代器支援 STL 算法ostringstream 或預留 reserve()string_view (C++17):唯讀訪問零拷貝std::out_of_range/std::length_errorstd::string 是 C++ 處理文本的標準利器:自動記憶體、豐富介面、運算符直觀、STL 無縫整合。掌握構造、長度、C 互轉、I/O、下標、拼接、增刪改查核心操作,配合現代 string_view/SSO 優化,能高效解決 99% 字符串處理需求,徹底擺脫 C 風格 char* 的記憶體噩夢。