剑指Offer - 替换空格

剑指Offer - 替换空格

//思路:
//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--;
        }
	}
};