1.题目描述
2.思路
首先对字符串中的字符进行逐个匹配,当是空格时,删除空格后再添加%20。
3.代码
class Solution {
public:
string replaceSpace(string s) {
for(int i=0;i<s.size();i++){
if (s[i]==' ')
{
s.resize(s.size()+3);
s.erase(i,1);
s.insert(i,"%20");
}
}
return s;
}
4.关键部分解释
4.1 resize函数
resize(),设置大小;
reserve(),设置容量;
resize()是分配容器的内存大小,而reserve()只是设置容器容量大小,但并没有真正分配内存。
resize()可以传递两个参数,分别是大小和初始值,初始值默认为0,reserve()只能传递一个参数,不能设置初始值,其初始值为系统随机生成。
4.2 erase函数
- 删除单个元素
str.erase(it)用于删除单个元素,it为需要删除元素的迭代器。
- 删除一个区间内的所有元素有元素
str.erase(pos,length),其中pos为需要开始删除的起始位置, length为删除的字符个数。
4.3insert函数
insert(pos,string),在pos号位置插入字符串string。
这部分关于c++的string用法可以参考这个博主的博客
5.不懂之处
第九行将 erase(i,1),改成了erase(i)
按照erase的用法,这样也是可以的,毕竟每次只循环一个字符嘛,但是这样便无法输出完整的字符串了。
我的理解是,这样不仅删除了i位置的空格,还是你这个变量无法继续执行循环,无意义了,直到下一次循环的输出。
大佬们知道的话给个正解,球球