C++ string 类的深度解析:探索字符串操作的核心
C++ std::string
是一个常用且强大的类,用于处理和操作字符串。它位于标准库的 <string>
头文件中,隶属于 std
命名空间。以下是对 C++ std::string
类的深入解析,涵盖其核心操作和特性。
1. 初始化与赋值
初始化:
std::string s1; // 默认构造 - 空字符串
std::string s2("Hello, World!"); // 直接初始化
std::string s3(s2); // 拷贝构造
std::string s4(5, 'a'); // 初始化为 "aaaaa"
赋值操作:
s1 = "New String"; // 使用 = 进行赋值
s2 = s3; // 拷贝赋值
s3.assign("Another String"); // 使用 assign 方法
2. 常用操作
连接与追加:
s1 = s2 + s4; // 使用 + 操作符连接
s1 += s2; // 使用 += 追加
s1.append(" more text"); // 使用 append 方法追加
大小与容量:
size_t length = s1.size(); // 获取长度,等价于 length()
size_t capacity = s1.capacity(); // 获取容量
bool isEmpty = s1.empty(); // 检查是否为空
s1.resize(10); // 调整大小
访问字符和子串:
char ch = s1[1]; // 访问字符
char ch2 = s1.at(2); // 使用 at 访问,带边界检查
std::string sub = s1.substr(0, 5); // 提取子串
3. 查找与替换
查找:
size_t pos = s1.find("World"); // 查找子串
size_t rpos = s1.rfind("o"); // 反向查找
替换:
s1.replace(0, 5, "Hi"); // 替换子串
4. 比较操作
- 比较:
if (s1 == s2) { /* Do something */ } if (s1 < s3) { /* Do something */ } int cmpResult = s1.compare(s3); // 比较,返回负值、0或正值
5. 输入与输出
- 标准流:
std::cout << s1 << std::endl; // 输出 std::cin >> s1; // 输入单个单词 std::getline(std::cin, s1); // 输入整行
6. 其他高级特性
迭代器:
for (std::string::iterator it = s1.begin(); it != s1.end(); ++it) {
// 迭代每一个字符
}
C 风格字符串:
const char* cstr = s1.c_str(); // 获取 C 风格字符串
字符替换与删除:
s1.erase(0, 5); // 删除位置0开始的5个字符
s1.insert(0, "Start "); // 插入字符串
总结
std::string
提供了丰富且强大的功能来操作字符串,使之成为 C++ 处理文本的得力工具。对于性能要求严格的场合,理解std::string
的内部机制(例如储存管理、拷贝优化等)也很重要。通过全面的掌握这些操作,你能高效地处理各种字符串相关问题。