码迷,mamicode.com
首页 > 其他好文 > 详细

替换空格

时间:2018-08-18 13:21:30      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:char   void   item   空格替换   位置   while   ldl   一个   计算   

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%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]!=\0;++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;

    }
};

 

    

替换空格

标签:char   void   item   空格替换   位置   while   ldl   一个   计算   

原文地址:https://www.cnblogs.com/dreamstick/p/9496449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!