C++ string 类
外观
C++ String类是标准模板库(STL)中提供的动态字符串类型,用于替代C风格字符数组(`char[]`),提供更安全、灵活和高效的字符串操作功能。本节将详细介绍其核心特性、常用方法及实际应用。
概述[编辑 | 编辑源代码]
C++中的std::string
类(定义在头文件<string>
中)封装了字符序列,支持动态内存管理、丰富的成员函数和运算符重载。与C风格字符串相比,其主要优势包括:
- 自动内存管理:无需手动分配/释放内存。
- 安全性:避免缓冲区溢出风险。
- 功能性:内置拼接、查找、替换等操作。
基本操作[编辑 | 编辑源代码]
声明与初始化[编辑 | 编辑源代码]
#include <string>
#include <iostream>
int main() {
std::string s1; // 空字符串
std::string s2 = "Hello"; // 从字面量初始化
std::string s3("World"); // 构造函数初始化
std::string s4(s2); // 拷贝构造
std::cout << s2 + " " + s3; // 输出: Hello World
return 0;
}
常用成员函数[编辑 | 编辑源代码]
方法 | 描述 | 示例 |
---|---|---|
length() |
返回字符串长度 | s2.length() // 5
|
append() |
追加内容 | s2.append("!") // "Hello!"
|
find() |
查找子串位置 | s2.find("ell") // 1
|
substr() |
提取子串 | s2.substr(1, 3) // "ell"
|
实际应用案例[编辑 | 编辑源代码]
用户输入处理[编辑 | 编辑源代码]
#include <string>
#include <iostream>
int main() {
std::string username;
std::cout << "Enter your name: ";
std::getline(std::cin, username); // 读取整行输入
if (!username.empty()) {
std::cout << "Welcome, " << username << "!\n";
} else {
std::cout << "Name cannot be empty.\n";
}
return 0;
}
输入/输出示例:
Enter your name: Alice Welcome, Alice!
字符串分割[编辑 | 编辑源代码]
使用find
和substr
实现按分隔符分割字符串:
#include <vector>
#include <string>
std::vector<std::string> split(const std::string &s, char delimiter) {
std::vector<std::string> tokens;
size_t start = 0, end = s.find(delimiter);
while (end != std::string::npos) {
tokens.push_back(s.substr(start, end - start));
start = end + 1;
end = s.find(delimiter, start);
}
tokens.push_back(s.substr(start));
return tokens;
}
高级特性[编辑 | 编辑源代码]
迭代器支持[编辑 | 编辑源代码]
std::string
兼容STL迭代器,支持范围循环:
for (char c : s2) {
std::cout << c << " "; // 输出: H e l l o
}
性能优化[编辑 | 编辑源代码]
- 预留空间:通过`reserve()`减少动态分配次数。
- 移动语义:C++11后支持移动构造,提升大字符串传递效率。
数学表示[编辑 | 编辑源代码]
字符串长度计算可表示为:
总结[编辑 | 编辑源代码]
std::string
是C++中处理文本的核心工具,结合了易用性与高性能。建议初学者掌握其基本操作后,逐步探索高级特性如正则表达式(<regex>
)和国际化支持(locale
)。