主要参考
https://wyqz.top/p/870124582.html
一、简介
#include <string>
using namespace std;
变长字符串,学C时心心念念的东西……和char数组相比,元素也是char类型,但不以’\0’结尾。
二、初始化
空字符串:
string s1;
C的风格:
string s2("hello");
拷贝与子串:
string s3(s2);
string s4("hello", pos, len); // 从位置pos开始取len个字符;只有一个整数参数时默认为长度,从位置0开始
string s5(s2, pos, len); // 同上,只有一个整数参数时默认为位置,截取到末尾
string s6(s2.begin(), s2.begin() + 3);
重复字符:
string s7(5, 'a'); // aaaaa
三、运算符
比较运算符<, >, <=, >=, ==, !=,还可以与cstring比较:
cout << (s3 > "he") << endl; // 输出1,即"hello" > "he\0"
拼接运算+:
cout << s3 + s7 << endl; // helloaaaaa
四、函数
先是和vector类似的一部分:
| 函数 | 作用 |
|---|---|
| s.size() / s.length() | 返回实际字符数 |
| s.capacity() | 总共可容纳字符数 |
| s.max_size() | 当前编译环境下string最大字符数(这东西会用到吗) |
| s.reserve(n) | 预分配n个字符的空间 |
| s.empty() | 判空 |
| s.at(i) | 有边界检查的访问 |
| s.begin() / s.end() | 迭代器 |
| s.front() / s.back() | 首尾元素 |
| s.push_back(‘a’) | 在末尾添加字符 |
| s.pop_back() | 删除末尾字符 |
| s.insert(pos, ‘a’) | 在迭代器pos处插入字符 |
| s.erase(pos) | 删除迭代器pos处的字符 |
| s.erase(p1, p2) | 删除[p1, p2) |
| s.clear() | 清空 |
| s.swap(s1) | 交换s和s1 |
然后是特有(?)的:
| 函数 | 作用 |
|---|---|
| s.append(“str”) | 在末尾添加字符串(像拼接运算+) |
| s.erase(i, n) | 从索引i开始删除n个字符 |
| s.c_str() | 转换为C-string |
| s.replace(i, n, str) | 把从索引i开始的n个字符替换为str(n小于str长度时会满足str) |
| s.replace(i, n1, n2, c) | 把i开始的n1个字符替换为n2个字符c(n2>n1时会满足n2,n2<n1时会截断) |
| s.replace(p1, p2, str) | 把迭代器所指范围[p1, p2)替换为str |
| s.substr(i, n) | 截取索引i开始的n个字符 |
以及一系列查找函数,其中索引i都可以不写,正向查找时默认为0,反向则默认为尾:
| 函数 | 作用 |
|---|---|
| s.find(str, i) | 从索引i开始正向查找子串str,str也可以换成字符c,返回下标,找不到返回-1 |
| s.rfind(str, i) | 同上,但向前查找 |
| s.find_first_of(str, i) | 在s中从i开始查找str中任意字符 |
| s.find_last_of(str, i) | 上面的反向查找版 |
| s.find_first_not_of(str, i) | 在s中从i开始查找不在str中的字符 |
| s.find_last_not_of(str, i) | 上面的反向查找版 |
还提到了大小写转换,但似乎不太常用,先插个眼,用到再说)
五、读入
cin读取遇到空格、回车结束;getline(cin, s)遇到回车结束,但会读取到前一次剩下的回车,所以要先把这个回车读出来。
string s1, s2;
cin >> s1;
cin.ignore(); // 忽略一个字符
getline(cin, s2);
cin/cout解锁,保证性能(去问AI的时候给出了这段代码,省事!):
// CSP标准模板开头
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
// 代码主体
}
总结
该去食堂抢饭了……那么string也算是初步学完了(吧)。感觉内容很基础但需要练习,但题目想必会涉及到algorithm库,晚上看一看!
639

被折叠的 条评论
为什么被折叠?



