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

C++ std::string 類別完整操作指南:建構、轉換、修改、搜尋與輸入輸出

     編輯:關於C++

為何選擇 std::string

取代 C 風格 char*,優勢:自動記憶體管理、內建豐富操作、支援 = 賦值、== 比較、+ 串聯,可視為基本型別使用。

引入標頭檔

#include <string>  // 注意非 string.h (C 風格)

建構函式總覽

形式說明
string s;空字串
string s(str);拷貝建構
string s(str, pos);自 pos 起至結尾
string s(str, pos, len);自 pos 起長度 len
string s(cstr);C 字串建構
string s(chars, len);C 字串前 len 字元
string s(n, c);n 個字元 c
string s(beg, end);迭代器區間 [beg, end)

C++ 字串與 C 字串互轉

  • c_str():回傳以 \0 結尾的 const char* (安全)
  • data():回傳字元陣列 const char* (不保證以 \0 結尾)
  • copy(buf, len):複製內容至既有緩衝區

警告:c_str() 回傳 const char*,若舊 API 需 char* 且不修改內容,可 const_cast;若會修改,**必須拷貝至非 const 緩衝區**,否則行為未定義。

大小與容量

  • size() / length():目前字元數
  • empty():是否為空
  • max_size():理論最大字元數
  • capacity():重新配置前可容納字元數
  • reserve(n):預留容量 (避免頻繁重配置)

元素存取

  • operator[]:不檢查邊界,const string 下 [size()] 回傳 \0
  • at():檢查邊界,越界拋出 out_of_range

避免取得元素參考/指標後再操作字串 (可能導致重配置而失效)。

比較操作

  • 運算子 == != < <= > >=:字典序比較
  • compare():多載支援子串比較、指定長度、C 字串比較,回傳 0/正/負
string s("abcd");
s.compare("abcd");       // 0
s.compare("dcba");       // < 0
s.compare("ab");         // > 0
s.compare(0, 2, s, 2, 2); // "ab" vs "cd" → < 0

修改內容

賦值

s = "new"; s = other; s = 'c';
s.assign(str); s.assign(str, 1, 3); s.assign(str, 2, npos);
s.assign("nico", 5); s.assign(5, 'x');

清空

s = ""; s.clear(); s.erase();

附加/插入/刪除/替換

s += str; s.append(str); s.push_back('c');
s.insert(pos, str); s.insert(pos, n, 'c');
s.erase(pos); s.erase(pos, n);
s.replace(pos, n, str); s.replace(pos, n, str, subpos, sublen);

子串與串聯

s.substr(); s.substr(pos); s.substr(pos, len);
s3 = s1 + s2; // 運算子+

輸入輸出

cin >> s;           // 讀單詞 (空白斷行)
getline(cin, s);    // 讀整行
cout << s;

搜尋與查找

函式說明
find(str/char, pos)正向找子串/字元
rfind(str/char, pos)反向找
find_first_of(set, pos)找集合中任一字元首次出現
find_last_of(set, pos)反向找集合字元
find_first_not_of(set, pos)找不在集合中的字元
find_last_not_of(set, pos)反向找不在集合中

回傳 size_type 索引,找不到回傳 npos (static constant)。比較時建議直接 if (s.find(...) == string::npos)。

迭代器支援

  • begin() / end():正向
  • rbegin() / rend():反向

符合 STL 容器慣例,可搭配演算式使用。

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