剑指Offer编程题2——替换空格

剑指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--;
        }
    }
};

 

另一种解题:

可以先计算出有多少个空格,需要向后移动多少,这样可以减少每次都从最后一个移动

 

 

posted @ 2019-04-08 11:24  hengxin  阅读(148)  评论(0编辑  收藏  举报