一、为什么要用 string?
之前学的 char[] 缺点:
- 必须手动处理
\0,容易乱码 - 不能直接用
=赋值、+拼接 - 长度受限,容易越界
- 函数少,操作麻烦
string 优点:
- 是 C++ 标准类,安全方便
- 可以直接
=、+、==比较 - 自动管理内存,不用管
\0 - 内置大量常用函数
头文件:
cpp
#include <string>
using namespace std;
二、string 定义与初始化
cpp
// 1. 空字符串
string s1;
// 2. 直接初始化
string s2 = "hello world";
// 3. 构造方式
string s3("C++ string");
// 4. 重复 n 个字符
string s4(5, 'a'); // "aaaaa"
三、最常用操作(必背)
1. 赋值 =
cpp
string s;
s = "hello";
2. 拼接 +
cpp
string s1 = "hello";
string s2 = " world";
string s3 = s1 + s2; // "hello world"
3. 访问单个字符(像数组一样)
cpp
string s = "hello";
cout << s[0]; // 'h'
cout << s[1]; // 'e'
4. 比较 > < == !=
直接按字典序比较,非常方便:
cpp
string s1 = "apple";
string s2 = "banana";
if (s1 < s2) { ... } // 成立
if (s1 == "apple") { ... }
四、string 常用成员函数
1. 获取长度
cpp
int len = s.size(); // 常用
int len = s.length(); // 一样
2. 判断是否为空
cpp
if (s.empty()) { ... }
3. 截取子串 substr
cpp
// 从下标 0 开始,取 3 个字符
string sub = s.substr(0, 3);
4. 查找 find(查找失败返回 string::npos)
cpp
int pos = s.find("llo");
if (pos != string::npos) {
cout << "找到了,下标:" << pos;
}
5. 替换 replace
cpp
// 从下标 2 开始,删除 2 个字符,替换成 "xx"
s.replace(2, 2, "xx");
6. 插入 insert
cpp
s.insert(1, "++"); // 下标 1 处插入
7. 删除 erase
cpp
s.erase(2, 3); // 从下标 2 删 3 个字符
五、输入与输出
cpp
string s;
cin >> s; // 遇到空格/回车停止
getline(cin, s); // 读取一整行(包括空格)
cout << s << endl;
注意:cin >> s 后如果要用 getline,需要吸收换行符。
六、完整综合示例
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello c++";
cout << "长度:" << s.size() << endl;
cout << "子串:" << s.substr(0, 5) << endl;
int pos = s.find("c++");
if (pos != string::npos) {
cout << "c++ 在下标:" << pos << endl;
}
s.replace(6, 3, "Python");
cout << "替换后:" << s << endl;
system("pause");
return 0;
}
七、string vs char [] 对比(面试常问)
表格
| 特性 | char[] | string |
|---|---|---|
| 内存 | 固定大小,手动管理 | 自动扩容 |
| 赋值 / 拼接 | 不能直接 = + |
可以直接用 |
| 结束符 | 必须 \0 |
自动处理 |
| 安全性 | 易越界、乱码 | 更安全 |
| 功能 | 极少 | 非常丰富 |
一句话:C++ 写字符串优先用 string!
八、新手易错点
- 忘记
#include <string> - 用
scanf/printf直接读写 string(会错) find没找到不判断,直接用下标- 下标越界访问
- 混用
cin >>和getline导致读空行
九、今日重点总结
string是 C++ 标准字符串,头文件<string>- 支持直接
=赋值、+拼接、==比较 - 常用函数:
size() / empty() / substr() / find() / replace() / insert() / erase() - 读整行用
getline(cin, s) - 比 char 数组更安全、更强大,优先使用