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