1、替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
知识点
字符串
解题思路
将长度为1的空格替换成长度为3的“%20”。
1、如果允许用新数组来存放替换空格后的字符串,则可直接进行遍历
用两个指针分别指向两个字符串,若原字符串不为空格则复制,若原字符串为空格则替换成“%20”。
2、如果必须在原字符串上操作,则可以考虑从后往前替换字符串
1)计算空格数
首先遍历得到原字符串中空格的数目,已知原字符串的长度,则可根据此计算出新字符串的长度。
2)替换空格
根据计算出的新旧字符串长度,使用两个指针指向新旧字符串的末尾,从后向前遍历。若原字符串不为空格则复制,若原字符串为空格则倒着替换成“02%”。
代码块
class Solution {
public:
void replaceSpace(char *str,int length) {
int oldlen=0,newlen=0;
//1、计算空格数
for(oldlen=0; str[oldlen]!= '\0'; oldlen++){
if( str[oldlen] == ' ' ){
newlen++;
}
}
//2、替换空格
newlen = oldlen + newlen*2;
str[newlen]='\0'; //很重要,一定要加上这一步
int i=0,j=0;
i=oldlen-1;
j=newlen-1;
while(i>=0 && j>=0){
if( str[i] == ' ' ){
str[j--]='0';
str[j--]='2';
str[j--]='%';
i--;
}else{
str[j--]=str[i--];
}//i--; //不管是if还是else都要把point1前移,为了下一次的执行
}
}
};