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 的字符串