c::用字符串代替空格f

来源:互联网 发布:linux svn 创建项目 编辑:程序博客网 时间:2024/05/09 09:17

1、题目要求:

请实现一个函数,把字符数组中的每个空格替换成“%20”。

2、分析:

1)想法一:我们可以再创建一个数组,当遇到空格的时候,就将所要替换的字符串一个一个放进去,这种方法当然可行,但是效率低又造成空间的浪费,所以我们不采取这种方法。

2)想法二:从前往后:在原基础上进行替换(空间是足够的),如果从前往后遇到空格就进行替换,必然后对原来的字符造成覆盖,不可以实现

3)想法三:从后往前:倒着遇到空格就玩够移动同时用字符串进行替换,如果全部都是空格的话,那势必造成时间复杂度O(n^2)的开销,可以实现的,但是做法不是很佳

4)想法四:因为我们要进行的是将字符串“%20”替换空格,所以我们可以利用如下的方式

     *先统计出源字符串中空格的个数

     *然后根据要替换的字符串中字符的个数和统计出的空格的个数的关系:

                 源字符串中空格的个数*2+2=替换后字符串中空格的个数

     *我们将源字符串的末尾记录下来,将替换后字符串的末尾记录下来,当源字符串的末尾不为空格的时候,就将源字符串对应的字符赋给替换后的字符串末尾指向的对应位置,否则就进行添加‘0’,‘2’,‘%’,这三个字符,然后源字符串末尾指针继续向前移动,最终结束的时候就是这两个指针相遇的时候。

       说了这么一大段,大家估计云里雾里,我用图来进行说明下:(我这里给的源字符串是“we are happy.”)


      两个指针一直在往左走最终相遇,替换完成

      *代码实现:

/*函数说明:请实现一个函数,把字符数组中的每个空格替换成“%20”。例如输入“we are happy.”,则输出“we%20are%20happy.”。*/#include<stdio.h>void Replace(char *a){char *str = a;int *end = NULL;int *new_end = NULL;int count = 0;while(*str != '\0'){if(*str == ' '){count++;}str++;}end = str-1;new_end = count*2+end;while(end != new_end){if(*end != ' '){*new_end-- = *end--;}else{*new_end-- = '0';*new_end-- = '2';*new_end-- = '%';end--;}}}int main(){char *a = "we are happy";printf("%s\n",a);Replace(a);printf("%s\n",a);//printf("%d\n",Blank_count(a));return 0;}





0 0
原创粉丝点击