剑指Offer编程题2——替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目解析:
从前向后扫描时,移动元素会出现覆盖的情况,因此选择从后往前扫描:
遇到空格时,将空格以后的字符串都向后移动两个位置,空格处放%,因此需要从最后一个元素开始移动,避免元素覆盖。
代码
class Solution {
public:
void replaceSpace(char *str,int length) {
int i=length-;
int j,count=;
while(i>=) //从后向前扫描字符串
{
if(str[i]==' ')
{
for(j=length-;j>=i;j--)
str[j+]=str[j]; //将字符串从空格到最后的移动两个位置
str[i]='%';
str[i+]='';
str[i+]='';
length+=;
}
i--;
}
}
};
另一种解题:
可以先计算出有多少个空格,需要向后移动多少,这样可以减少每次都从最后一个移动