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"; }