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

C++ string 類型深度解析與常用操作指南

     編輯:關於C++

string 類型本質

C++ 標準庫提供的 std::string 並非內置類型,而是定義在 <string> 頭文件中的類模板實例化類型。每個 string 變量都是類對象,內部自動管理動態內存,**長度隨內容動態變化**,無需預先指定容量。

初始化方式

// 1. 默認構造(空串)
std::string s1;

// 2. C 風格字符串初始化
std::string s2 = "hello";
std::string s3("world");

// 3. 拷貝初始化
std::string s4 = s2;

// 4. 部分構造:從 s2 位置 1 開始取 3 個字符
std::string s5(s2, 1, 3);  // "ell"

// 5. 重複字符構造
std::string s6(5, 'x');  // "xxxxx"

// 6. 迭代器範圍構造
std::string s7(s2.begin(), s2.end());

關鍵差異:C 字符串 vs string

  • C 字符串以 '\0' 結尾,長度由 strlen 計算
  • string 內部**不存儲 '\0'**,長度由 size() 直接返回 O(1)
  • string 支持嵌入空字符:std::string s("a\0b", 3); // 長度為 3

常用操作詳解

賦值與拼接

std::string a = "hello";
std::string b = "world";

a = b;           // 拷貝賦值
a += "!";        // 尾部追加字符
a.append("!!");  // 追加字符串
a + b;           // 返回新字符串,不修改原值
// 錯誤:"hello" + "world"  // 至少一邊需是 string

比較操作

支持全部關係運算符(== != < > <= >=),按字典序比較,返回 bool。

元素訪問

std::string s = "abc";
char c1 = s[1];        // 無邊界檢查
char c2 = s.at(1);     // 越界拋出 std::out_of_range
char c3 = s.front();   // 首字符
char c4 = s.back();    // 尾字符
const char* p = s.c_str(); // C 風格指針,以 '\0' 結尾
const char* p2 = s.data(); // C++11 起同 c_str()

容量管理

s.size();      // 當前長度
s.length();    // 同 size()
s.capacity();  // 當前分配容量
s.empty();     // 是否為空
s.reserve(100); // 預留容量,避免頻繁擴容
s.shrink_to_fit(); // C++11 釋放多餘容量

修改操作

s.insert(pos, str);     // 插入
s.erase(pos, len);      // 刪除
s.replace(pos, len, str); // 替換
s.clear();              // 清空內容
s.push_back('x');       // 尾部添加字符
s.pop_back();           // C++11 移除尾部字符

查找與子串

s.find(sub);           // 正向查找,返回位置或 npos
s.rfind(sub);          // 反向查找
s.find_first_of(chars); // 查找任一字符
s.substr(pos, len);    // 截取子串

string 數組與向量

// 定長數組
std::string names[3] = {"Zhang", "Li", "Zhao"};

// 動態數組(推薦)
std::vector<std::string> vec = {"apple", "banana"};
vec.push_back("orange");

優勢:每個元素長度獨立,無需像二維 char 數組那樣固定列寬;無 '\0' 結束符開銷。

性能提示

  • SSO (Small String Optimization):現代實現對短字符串(通常 ≤15/22 字符)直接存儲在對象內部,避免堆分配
  • 頻繁拼接時預先 reserve()
  • 跨函數傳遞優先用 const std::string& 或 std::string_view (C++17)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved