先计算出空格总数,进而计算出替换之后的新字符串的总长度。
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--]='%'; } } } };