1. 字符串基礎:大小與容量
cpp
void test1() {string s1("Hello World");cout << "size : " << s1.size() << endl; // 輸出字符串長度cout << "capacity = " << s1.capacity() << endl; // 輸出字符串容量s1.reserve(100); // 預留空間cout << "reserve capacity = " << s1.capacity() << endl;s1.clear(); // 清除字符串內容cout << "clear size : " << s1.size() << endl;cout << "clear capacity = " << s1.capacity() << endl;cout << "clear s1 : " << s1 << endl; }
size()
: 返回字符串實際長度capacity()
: 返回字符串當前分配的存儲空間大小reserve(n)
: 預留空間,避免頻繁重新分配內存clear()
: 清空字符串內容,但通常不會改變容量
2. 字符串遍歷與訪問
cpp
void test2() {string s1("Hello World");// 使用下標訪問for (int i = 0; i < s1.size(); i++) {cout << s1[i] << " ";}// 使用迭代器string::iterator it = s1.begin();while (it != s1.end()) {cout << *(it++) << " ";}// 使用反向迭代器string::reverse_iterator rit = s1.rbegin();while (rit != s1.rend()) {cout << *(rit++) << " ";}// 使用范圍for循環for (auto s : s1) {cout << s << " ";} }
C++提供了多種遍歷字符串的方式:
下標操作符
[]
正向迭代器
iterator
反向迭代器
reverse_iterator
范圍for循環(C++11引入)
3. 字符串修改操作
增加內容
cpp
// push_back: 尾部增加一個字符 s2.push_back('Y');// append: 在末尾添加字符串 s3.append("YM"); s3.append(5, 'y'); // 添加5個'y'// insert: 在指定位置插入 s4.insert(5, " YM"); s4.insert(5, 3, '*'); // 插入3個'*'// += 運算符 s5 += " YM";
刪除內容
cpp
// pop_back(): 刪除最后一個字符 s6.pop_back();// erase: 刪除指定位置字符 s7.erase(8, 1); // 刪除下標8開始的1個字符 s7.erase(s7.begin()); // 刪除開頭字符
修改內容
cpp
// replace: 替換內容 s8.replace(6, 2, "YM"); // 將下標6開始的2個字符替換為"YM"// swap: 交換內容 swap(s9, s10); // 算法庫的swap s9.swap(s10); // 字符串類的swap,效率更高
4. 字符串查找與子串操作
cpp
void test4() {string s1("Hello World");// find: 正向查找size_t pos = s1.find('l');// rfind: 反向查找size_t rpos = s1.rfind('l');// 查找第一個出現在/不出現在給定集合中的字符size_t fpos = s1.find_first_of("ol");size_t nfpos = s1.find_first_not_of("ol");// substr: 獲取子串string s = s1.substr(pos); // 從pos到結尾string s_part = s1.substr(pos, 3); // 從pos開始3個字符 }
查找函數返回string::npos
(通常是size_t的最大值)表示未找到。
5. 字符串比較
字符串比較可以直接使用關系運算符:
cpp
string a = "apple"; string b = "banana";if (a < b) { // 字典序比較cout << "a comes before b"; }// 或者使用compare函數 int result = a.compare(b); if (result < 0) {cout << "a is less than b"; }