STL string
可变长的字符序列,需要引入头文件 <string>
赋值
1 |
复制 |
输入输出
1 |
复制 |
后记
使用 getline(cin,str) 输入时需要注意回车符
什么意思呢?举个例子
1 |
复制 |
这时你输入
1 | NVIDIA 复制 |
程序会在你输入完第一行后直接输出一个NVIDIA与几个换行符
原因是 cin 遇到回车停止,此时 getline 直接把NVIDIA后的部分(空)读入然后再次遇到回车符,停止输入。
为了避免这种情况,我们需要忽略掉一个回车符,可以使用getchar()。
1 |
复制 |
常用操作
str.empty()- 返回一个 bool 值。
- 如果 string 为空返回 1,非空返回 0。
str.size()返回 string 的长度,等价于s.length()strlen()需要循环一遍数组,时间复杂度为 O(n)。str.size()不需要循环,时间复杂度为 O(1)。
比较
- string 型之间按字典序比较直接
str1 < str2即可,== != <= >= < > <=>都支持。
- string 型之间按字典序比较直接
相加
- string 型之间相加直接
str1 += str2、str3 = str1 + str2这样写即可。 - 与其他类型(字符、字符串)相加时会先把这些类型的量转化为 string 对象,可以直接加这些类型的量,如
str += 'a'、str1 = str2 + "abc" - 相加运算时,必须保证等号两边都有 string 型,
str1 = str2 + "hello" + 'a'、str1 += "hello"是可以的, 但是str1 = "hello" + 'a'会报错。- 注意运算顺序,如
string s1 = s2 + "abc" + 'd'正确,因为会先将 s2 与 "abc" 相加得到另一个 string 对象,再继续运算。而string s1 = "abc" + 'd' + s2会报错,因为 "abc" 和 'd' 不能相加 ("abc"和"cde"也不行)
- 注意运算顺序,如
- string 型之间相加直接
操作单个字符
可以当作字符数组处理,如
str[0],str[3]独特的遍历方式
1
2
3
4
5
6
7
8
9
10
11
using namespace std;
int main(){
cout << "So, NVIDIA," << endl;
string s = "Fuck U";
for (char c : s) { // char c可以写作 auto c
cout << c << endl;
}
return 0;
}复制输出:
1
2
3
4
5
6
7So, NVIDIA,
F
u
c
k
U复制
str.pop_back()删除 string 型字符串的最后一个字符str.substr(int i,int len)- 输出字符串 str 从 i 开始长度为 len 的字符串