在C++中,std::string类(basic_string<char>的特化)是处理字符串的核心工具。相比于传统的C风格字符串,它提供了安全、灵活且功能丰富的接口。本文将系统梳理string类中最常用的成员函数,帮助你写出更简洁、易读且高效的代码。
1. 构造与赋值
构造函数和赋值运算符是创建和修改字符串的基础。
-
默认构造与空串构造
std::string s1; // 创建空字符串
std::string s2(""); -
C风格字符串构造
std::string s3 = "Hello, World!";
-
拷贝构造与移动构造
std::string s4 = s3; // 拷贝构造
std::string s5 = std::move(s3); // 移动构造 -
赋值运算符
s1 = "New Value";
s1 = s2; // 赋值另一个string
s1 = 'c'; // 赋值单个字符 -
赋值函数
s1.assign("Assign this string");
s1.assign(5, 'a'); // 生成 "aaaaa"
assign()函数比=运算符更灵活,支持更多参数形式[[1]][[2]]。
2. 容量管理函数
这些函数用于查询或调整字符串的存储空间。
-
长度查询
std::size_t len = s1.length(); // 与size()等价
bool isEmpty = s1.empty(); // 判断是否为空 -
容量相关
s1.reserve(100); // 预分配至少100个字符的空间,减少后续扩容次数
std::size_t cap = s1.capacity(); // 当前分配的容量
s1.shrink_to_fit(); // 申请回收未使用的内存空间 -
大小调整
s1.resize(10, '*'); // 将长度调整为10,不足则填充'*'
s1.clear(); // 清空字符串,长度变为0
合理使用reserve()和shrink_to_fit()可以显著提升大字符串拼接的性能[[3]][[4]]。
3. 字符访问与修改
直接对单个字符进行操作的函数。
-
下标与范围检查
char c1 = s1[0]; // 不检查越界
char c2 = s1.at(0); // 检查越界,抛出异常 -
首尾元素
char first = s1.front();
char last = s1.back(); -
推入与弹出
s1.push_back('!'); // 末尾追加
s1.pop_back(); // 删除末尾字符
4. 字符串搜索与操作
这是string类最强大的部分,涵盖了查找、插入、删除、替换等功能。
-
查找函数
std::size_t pos = s1.find("World"); // 正向查找
std::size_t rpos = s1.rfind("l"); // 反向查找
std::size_t firstOf = s1.find_first_of("aeiou"); // 查找第一个元音字符 -
提取子串
std::string sub = s1.substr(0, 5); // 提取前5个字符
-
插入与删除
s1.insert(5, "INSERT"); // 在索引5处插入子串
s1.erase(5, 3); // 删除从索引5开始的3个字符 -
替换与追加
s1.replace(0, 5, "REPLACE"); // 替换前5个字符
s1.append(" More text"); // 追加
s1 += " and even more"; // 使用+=追加
find()系列函数是字符串搜索的核心,返回std::string::npos表示未找到[[5]][[6]]。
5. 迭代器与非成员函数
除了成员函数,string类还支持迭代器和流操作。
-
迭代器
for (auto it = s1.begin(); it != s1.end(); ++it) {
std::cout << *it;
}
// 或者使用范围for循环
for (char c : s1) {
std::cout << c;
} -
流输入输出
std::cout << s1 << std::endl; // 输出
std::cin >> s2; // 输入(遇空格结束)
std::getline(std::cin, s3); // 输入整行 -
比较函数
int cmp = s1.compare(s2);
// 或者直接使用运算符
if (s1 == s2) { ... }
std::string支持完整的迭代器接口,允许与STL算法无缝结合[[7]][[8]]。
总结
掌握以上这些函数,你就能应对绝大多数的字符串处理需求。从基本的拼接(+、+=、append)到复杂的搜索(find、rfind)和替换(replace),std::string提供了一个安全、易用且高效的API。希望这篇文章能帮你在C++编程之路上走得更稳、更远!






