天天看點

【劍指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;
    }