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

剑指offer第四题方法总结

时间:2016-05-13 15:13:18      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

题目:输入一个字符串,要求将这个字符串中所有空格的位置都替换成”%20“.例:输入I love you. 输出I%20love%20you.
分析:空格是一个字符,%20是三个字符,所以替换的时候要向后挪动。
          这里有三种方法。
          第一种:从前向后遍历字符串,遇到一个空格,则将这个空格之后的字符‘\0‘开始依次向后挪动两个字符,然后再放入%20,直到遍历完整个字符串。这种方法效率比较低。
          第二种:重新创建一个字符数组,将这个字符串拷贝过来,遇到空格就替换成%20. 这种方法虽然效率高,但是空间复杂度却增高了。
          第三种:先统计整个字符串中空格的数量。再‘\0‘开始向后一次挪动2*空格数,遇到一次空格,则空格数减一,并且将%20放入。直到空格数为0. 这种方法时间和空间相对来说都是最理想的。


在这里我们只实现第三种:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

char *replace_blank(char src[])
{
      assert(src );
      int blank = 0;
      char *psrc = src ;
      while (*psrc)                       //统计空格个数,同时让psrc指向‘\0'
      {
          if (*psrc == ' ' )
               blank++;
            psrc++;
      }
      while (blank)
       {
           if (*psrc== ' ' )                               //遇到空格开始替换
            {
               *(psrc+blank*2)= '0';
               *(psrc+blank*2-1)= '2';
               *(psrc+(--blank)*2)= '%';
            }
            else
              *(psrc+blank*2)= *psrc;
           psrc--;
       }
      return src ;
}


int main()
{
                char src[50] = { 0 };
                gets(src);
                char *ret = replace_blank(src);
                printf( "%s\n", ret);
                system( "pause");
                return 0;
}


剑指offer第四题方法总结

标签:

原文地址:http://blog.csdn.net/lf_2016/article/details/51379511

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