【剑指offer】替换空格

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 
题目不难,就是自己做的不好。
脑子不清晰,也忘了考虑边界条件。
 
好的思路:
由于空格变成%20多出了两位,所以最后字符串一定变长了。
先统计有多少的空格,length - 1 + 2 * 空格数 就是替换后最后一个字符的位置,从后向前依次赋值即可。
void replaceSpace(char *str,int length) {
        int n1 = 0;
        int nb = 0;
        for (int i=0; str[i]!='\0'; i++){
            n1++;
            if (str[i] == ' ')
                nb++;
        }
        int newn1 = n1 + 2 * nb;
        str[newn1] = '\0';
        int i,j;
        for (i=n1-1,j=newn1-1; i>=0 && nb>0; i--){
            if (str[i] == ' '){
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
                nb--;
            }
            else{
                str[j--] = str[i];
            }
        }
 
    }

 

 

我的超挫代码

void replaceSpace(char *str,int length) {
        char * ss = new char[3 * length];
        int i = 0,j = 0;
        while(i < length)
        {
            if(str[i] == ' ')
            {
                i++;
                ss[j++] = '%';
                ss[j++] = '2';
                ss[j++] = '0';
            }
            else
            {
                ss[j++] = str[i++];
            }
        }
        ss[j] = '\0';
        while(j >= 0)
        {
            str[j] = ss[j];
            j--;
        }
        delete ss;
    }

 

posted @ 2015-07-24 17:22  匡子语  阅读(226)  评论(0)    收藏  举报