前言
继上篇有关 string 类的文章,已有一段时间未更新后续啦。今天我们来继续学习 string 类的一些常用接口,然后使用这些接口进行算法习题练习。
一、string 类的常用接口
1.1 string 类对象的访问及遍历操作
operator[]: 返回 pos 位置的字符,const string 类对象调用begin+end: begin 获取第一个字符的迭代器,end 获取最后一个字符下一个位置的迭代器rbegin+rend: rbegin 获取最后一个字符的迭代器,rend 获取第一个字符下一个位置的迭代器
注意:
- 第一个相当于数组的 [],后面模拟实现 string 类的时候,会重载 [] 并进行使用,就是访问指定位置用的。
- 后面的 begin 和 end 就是迭代器的内容,在使用 swap 等函数时,会用到 begin 和 end。
1.2 string 类对象的修改操作
push_back: 在字符串后尾插字符 cappend: 在字符串后追加一个字符串operator+=: 在字符串后追加字符串 strc_str: 返回 C 格式字符串find+npos: 从字符串 pos 位置开始往后找字符 c,返回该字符在字符串中的位置rfind: 从字符串 pos 位置开始往前找字符 c,返回该字符在字符串中的位置substr: 在 str 中从 pos 位置开始,截取 n 个字符,然后将其返回
注意:
- 在 string 尾部追加字符时,s.push_back(c) / s.append(1, c) / s += 'c' 三种的实现方式差不多,一般情况下 string 类的 += 操作用的比较多,+= 操作不仅可以连接单个字符,还可以连接字符串。
- 对 string 操作时,如果能够大概预估到放多少字符,可以先通过 reserve 把空间预留好。
1.3 string 类非成员函数
operator+: 尽量少用,因为传值返回,导致深拷贝效率低operator>>: 输入运算符重载operator<<: 输出运算符重载getline: 获取一行字符串relational operators: 大小比较
上面的接口了解一下就 OK 啦,实在想弄明白,点击链接查看文档,已经生成文档链接了。我们后续模拟实现 string 类的时候也会讲到。
二、牛刀小试
下面来一些习题,都是有关字符串的操作的,这样能更好的熟练 string 类的一些接口的使用。
2.1 反转字母
本题就是使用的对撞指针。话不多说,上代码。
class Solution {
public:
bool isLetter {
(ch >= && ch <= ) ;
(ch >= && ch <= ) ;
;
}
{
(S.()) S;
begin = , end = S.() - ;
(begin < end) {
(begin < end && !(S[begin])) ++begin;
(begin < end && !(S[end])) --end;
(S[begin], S[end]);
++begin;
--end;
}
S;
}
};


