替换空格

Posted dreamstick

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换空格相关的知识,希望对你有一定的参考价值。

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 
1、很直接的做法:从前往后遍历:遇到空格,就将空格后面的字符往后移动两位。然后将空格替换为%20。(这样子做,每遇到一个空格,其后面的字符都需要移动一次,所以对于一个字符,其移动的次数是其前面空格的个数)
      c++:
      
class Solution {
public:
    void replaceSpace(char *str,int length) {
       // char * p =str;
        int i,j;
       for(i=0;i<length;i++)
       {
           if(str[i]== )
           {
               for(j=length-1;j>i;j--)
                   str[j+2]=str[j];
               str[i]=%;
               str[i+1]=2;
               str[i+2]=0;
           }
       }
 
    }
};

 

2、优化的解法:从后往前遍历:首先计算出将空格替换成%20后,整个字符串的长度,然后从后往前遍历,将字符移动到其最终的位置。(相对于其中第一种解法:每一个自符都最多只要移动一次)
      c++:
  
class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str == NULL||length <0) return;
        int oldlength = 0;
        int newlength = 0;
        int space_num = 0;
        for(int i = 0;str[i]!=;++i)
        {
            ++oldlength;
            if(str[i]== )
            {
                ++space_num;
            }       
        }
        newlength = oldlength + space_num*2;
        if(newlength>length) return;
        while(oldlength>=0)
        {
            if(str[oldlength]!= )
            {
                str[newlength--] = str[oldlength];
            }
            else
            {
                str[newlength--]=0;
                str[newlength--]=2;
                str[newlength--]=%;
            }
            --oldlength;
        }
        return;

    }
};

 

    

以上是关于替换空格的主要内容,如果未能解决你的问题,请参考以下文章

如何从主要活动中替换片段

用片段替换时操作栏向下移动

如何在android studio中用另一个片段替换一个片段

用片段替换某些东西

试图替换片段,但它一直显示相同的片段

正则表达式替换markdown文件代码块标记中的所有空格