首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 基礎

C++ string 類完全指南:構造、輸入輸出、操作、轉換與高效字符串處理實戰

     編輯:C++ 基礎

string 類優勢

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 風格互轉: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 @"

核心操作函數:增刪改查

1. 插入 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 異常

2. 刪除 erase()

string s1 = "1234567890", s2 = s1, s3 = s1;
s2.erase(5);       // 從 5 刪至末尾 → "12345"
s3.erase(5, 3);    // 從 5 刪 3 字符 → "1234590"
// len 參數自動截取至末尾,不會越界

3. 子串提取 substr()

string s1 = "first second third";
string s2 = s1.substr(6, 6);  // 位置 6 長度 6 → "second"
// pos 越界拋異常,len 越界截取至末尾

4. 查找函數族

函數功能返回
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 算法

效能與最佳實踐

  1. 避免頻繁拼接重新分配:大量拼接用 ostringstream 或預留 reserve()
  2. 優先用 string_view (C++17):唯讀訪問零拷貝
  3. 小字符串優化 (SSO):現代實現短串不分配堆記憶體
  4. 異常安全:操作失敗拋出 std::out_of_range/std::length_error

總結

std::string 是 C++ 處理文本的標準利器:自動記憶體、豐富介面、運算符直觀、STL 無縫整合。掌握構造、長度、C 互轉、I/O、下標、拼接、增刪改查核心操作,配合現代 string_view/SSO 優化,能高效解決 99% 字符串處理需求,徹底擺脫 C 風格 char* 的記憶體噩夢。

  1. 上一篇文章:
  2. 下一篇文章:
  • --热点文章
  • Copyright © 程式碼之家 All Rights Reserved