先计算出空格总数,进而计算出替换之后的新字符串的总长度。

class Solution {
public:
    void replaceSpace(char *str,int length) { //"length"为字符数组str的总容量
        if(str==nullptr||length<=0) return; //str为空指针或者字符数组容量为0的情况
        int spacenum=0,strlength=0;
        for(int i=0;str[i]!='\0';i++){
            strlength++;
            if(str[i]==' ')  spacenum++; // ' '代表空格,中间有一空格;''代表空。
        }
        int newlength=strlength+2*spacenum;
        int i=newlength;  //结尾符号'\0'也要转移,所有这里的i和下面的j都没有减1
        for(int j=strlength;j>=0;j--){
            if(str[j]!=' '){
                str[i]=str[j];
                i--;
            } 
            else{
                str[i--]='0';
                str[i--]='2';
                str[i--]='%';
            }
        }
    }
};