好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

面试题2:替换空格

来源:《剑指Offer》 题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则 输出”we%20are%20happy”。 分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增

来源:《剑指Offer》

题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则 输出”we%20are%20happy”。

分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增加了2,N个空格,长度增加2N。则
替换后的字符串长度 = 原字符串长度 + 2N
设置两个指针,一个指向原字符串末尾,一个指向新字符串末尾。第二遍遍历,从后往前遍历。将原字符串最后一个字符复制到新字符串最后一个字符的位置,两个指针同时前移。当原字符串遇到空格,在新字符串对应位置插入”%20”三个字符,接着原字符串指针前移1位,新字符串指针前移3位。如此操作,直到原字符串第一个字符也复制完结束。

代码(C++):

  #include  
 using   namespace   std ;

 #define MAX_LEN 100 

 /*
    函数功能:替换字符串中的空格
  */ 
 void  replaceBlank( char  data[])
{
     int  i= 0 ,j;
     int  old_len;
     int  new_len;
     int  blank_num= 0 ;
     // 遍历一遍,找出空格数 
     while (data[i]!= '\0' )
    {
         if (data[i]== ' ' )
        {
            blank_num++;
        }
        i++;
    }
     //-----------这里是关键------------ 

     // 原来字符串长度 
    old_len=i+ 1 ;
     // 计算新字符串长度 
    new_len=old_len+ 2 *blank_num;
     // 重置i,j 
    i=old_len- 1 ;
    j=new_len -  1 ;

     //-----------这里是关键------------ 


     // 再遍历一遍,替换空格 
     while (i>= 0 )
    {
         if (data[i]!= ' ' )
        {
            data[j]=data[i];        
            j--;
        }
         else 
        {
            data[j]= '0' ;
            data[j- 1 ]= '2' ;
            data[j- 2 ]= '%' ;
            j-= 3 ;
        }
        i--;
    }

}
 int  main()
{
     char  str[MAX_LEN]; // 声明一个字符数组 

     // 输入数组 
     cout  "请输入一个字符串,不超过20个字符"  // 替换 
    replaceBlank(str);
     // 打印 
     cout  return   0 ;
}

  

查看更多关于面试题2:替换空格的详细内容...

  阅读:40次