替换空格

题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

 

时间复杂度o(n)的算法

先遍历一次字符串统计出空格的总数,计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。考虑从字符串的后面开始复制和替换。设置两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾。向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止

 

 

 

 1 int replace_blank(char a[])
 2 {
 3     if( a == null )
 4     {
 5         printf("exception\n");
 6         return ;
 7     }
 8     // 计算字符串实际长度,空格长度,替换后的字符串长度
 9     int len_a=0;
10     int len_b=0;
11     int len_c=0;
12     int i=0;
13     while( a[i] != 0 )
14     {
15         ++len_a;
16         if( a[i] == ' ' )
17             ++len_b;
18         
19         ++i;
20     }
21     len_c=len_a+2*len_b;
22     int p1=len_a;
23     int p2=len_b;
24     // p1!=p2
25     while( p1 >= 0 && p2 > p1 )
26     {
27         if(a[p1]==' ')
28         {    
29             a[p2--]='0';
30             a[p2--]='2';
31             a[p2--]='%';
32         }
33         else
34         {
35             a[p2--]=a[p1];
36         }
37         p1--;
38     }
39                 return ;
40 }

 

posted on 2013-07-18 18:38  听雪同学  阅读(238)  评论(0编辑  收藏  举报

导航