
//思路:
//1.从前往后插入移动的次数多,不建议
//2.从后往前插入更方便
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str==nullptr || length<0)return;
int i=0;
int oldlen=0;//记录原字符串长度
int blanknum=0;//记录空格数量
while(str[i]!=0){
oldlen++;
if(str[i]==' ')blanknum++;
i++;
}
int newlen=oldlen+blanknum*2;//替换空格后的新字符串长度
if(newlen>length)return;//如果计算后的长度大于总长度就无法插入
int pOldlen=oldlen;//注意不要减一,字符串末尾的结束符null也需计算在内
int pNewlen=newlen;
while(pOldlen>=0 && pNewlen>=pOldlen){
if(str[pOldlen]!=' '){
str[pNewlen--]=str[pOldlen];
}else{//将空格就替换为"%20"
str[pNewlen--]='0';
str[pNewlen--]='2';
str[pNewlen--]='%';
}
pOldlen--;
}
}
};