1,题目要求
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2,题目思路
对于这道题,要求将一个字符串中所有的空格替换为%20这三个字符。
题目的输入并不明确,第二个参数也不明白是干嘛的。看了题解才明白,是str所申请的空间的总长度,相当于一个字符数组申请的总长度,超过改长度,则无法为字符分配空间。
于是,对于这道题,核心要点在于,从后往前分配字符,以减少向后移动的次数。
零碎的要点在于:
- 对char *str可以直接用索引进行遍历。
- str++是指针操作,但是这样会改变字符读取开始位置,导致之后读取字符错误。
- 假如有5个字符,则str[5] = ‘\0’。
- 我们在进行字符的进行中,需要考虑将’\0’加入到末尾。
- 循环操作时,不能瞎在[]内进行i++或者i–,要保证逻辑。
3,代码实现
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==nullptr||length<0)
return;
int i = 0, originLen = 0, newLen = 0, spaceNum = 0;
while(str[i]!='\0'){
if(str[i++] == ' ')
spaceNum++;
originLen++;
}
newLen = originLen + 2*spaceNum;
if(newLen > length)
return;
while(originLen>=0){
if(str[originLen] == ' '){
str[newLen--] = '0';
str[newLen--] = '2';
str[newLen--] = '%';
}
else
str[newLen--] = str[originLen];
originLen--;
}
return;
}
};