C++ 算法竞赛中 string 常用用法(极简实用版)
算法竞赛里 string 就是可变长度字符数组,比 char 数组好用太多,不用管长度、不用手动拷贝,直接当数组用。
1. 头文件
| #include <iostream>
#include <string>
using namespace std;
|
2. 定义与初始化
| string s; // 空串
string s = "abc";
string s1(s); // 拷贝构造
string s2(5, 'a'); // "aaaaa"
|
3. 访问字符(像数组一样)
| string s = "hello";
char c = s[0]; // 'h'
s[1] = 'E'; // 变成 "hEllo"
|
4. 常用成员函数(竞赛高频)
长度 / 判空
| s.size(); // 长度(推荐)
s.length(); // 同上
s.empty(); // 是否为空,返回 bool
|
拼接
| s += "abc";
s += 'x';
s = s1 + s2;
|
插入、删除
| s.insert(pos, "str"); // 在 pos 前插入字符串
s.erase(pos, len); // 从 pos 删 len 个字符
s.erase(pos); // 从 pos 删到末尾
|
截取子串
| s.substr(pos, len);
// 从 pos 开始,取 len 个字符
// 不写 len 就取到末尾
|
查找
| s.find("ab");
// 返回第一次出现的下标
// 找不到返回 string::npos
|
常用判断:
| if (s.find("abc") != string::npos) {
// 找到了
}
|
替换
| s.replace(pos, len, "new_str");
|
清空
5. 比较
直接用运算符:
| if (s1 < s2) … // 字典序比较
s1 == s2
s1 != s2
|
6. 与数字互转(竞赛超级常用)
字符串 → 数字
| stoi(s); // int
stoll(s); // long long
|
数字 → 字符串
7. 遍历字符串
| // 普通 for
for (int i = 0; i < s.size(); ++i)
cout << s[i];
// 范围 for
for (char c : s)
cout << c;
|
8. 输入输出
| string s;
cin >> s; // 读到空格/换行停止
getline(cin, s); // 读一整行(包括空格)
cout << s;
|
注意:cin 后用 getline 要先吞换行。
9. 常用技巧
-
反转字符串
| reverse(s.begin(), s.end());
|
-
排序
| sort(s.begin(), s.end());
|
-
判断回文
| string t(s.rbegin(), s.rend());
if (s == t) // 回文
|
-
转小写/大写
| for (char &c : s) c = tolower(c);
for (char &c : s) c = toupper(c);
|
10. 常见坑