Q:请实现一个函数,将一个字符串中的空格替换成“20%”。例如,当字符串为 WE ARE HAPPY。

经过替换后字符串为WE20%ARE20%HAPPY。


思路 :
//1:从前往后插入,这样移动·的次数多不建议 
//2:从后往前插入。


两者区别:

从后往前,每个空格后面的字符只需要移动一次。从前往后,当遇到第一个空格时,要移动第一个空格后所有的字符一次;当遇到第二个空格时,要移动第二个空格后所有的字符一次;以此类推。所以总的移动次数会更多。


class Solution { 

public: 

void replaceSpace(char *str,int length) { 

        //遍历一边字符串找出空格的数量 

        if(str==NULL||length<0) 

            return ; 

        int i=0; 

        int oldnumber=0;//记录以前的长度 

        int replacenumber=0;//记录空格的数量 

        while(str[i]!='\0') 

            { 

               oldnumber++; 

               if(str[i]==' ') 

                   { 

                     replacenumber++; 

                   } 

                  i++;  

            } 

        int newlength=oldnumber+replacenumber*2;//插入后的长度 

        if(newlength>length)//如果计算后的长度大于总长度就无法插入 

            return ; 

        int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里 

        int pNewlength=newlength; 

        while(pOldlength>=0&&pNewlength>pOldlength)//放字符 

            { 

              if(str[pOldlength]==' ') //碰到空格就替换 

                  { 

                     str[pNewlength--]='0'; 

                     str[pNewlength--]='2'; 

                     str[pNewlength--]='%'; 

                      

                  } 

               else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置 

               { 

                    str[pNewlength--]=str[pOldlength]; 

                    

               } 

             pOldlength--; //不管是if还是elsr都要把pOldlength前移 

              

           } 

         


} 

};




思路3:


 一行JAVA代码搞定:   return str.toString().replaceAll(&quot; &quot; , &quot;%20&quot;);