用较小的代价去除字符串中的空格

http://www.cnblogs.com/houjun/p/4915484.html

题目:

  用C语言写一个函数,去除字符串中的空格,并返回删除的空格的个数。不允许开辟新的空间,只能申请简单类型的自动变量。时间复杂度要求为O(n)。

比如:char str[]="dhkak   df d fd     fdjfkda     dfd   ff f  fd da ";

 

处理之后: str[]="dhkakdfdfdfdjfkdadfdffffdda";

返回删除空格的个数为:12
算法思想:
  先取字符串的长度,然后用前后各一个指针,分别为p,q,使前面一个指向空格,后面一个指向字符,然后用后面的值替换前面的空格,然后用空格替换;p指向下一个空格,q指向下一个值,直到p指向'\0'跳出循环,计算此时字符串的长度,再用处理之前的长度减去处理之后的长度,就可以得到删除的空格的个数。
代码如下:

复制代码
 1 #include <stdio.h>
 2 int deleteSpace(char *pstr);
 3 int main()
 4 {
 5     char str[]="dhkak df d fd   fdjfkda  dfd ff  f fd da ";
 6     int spaces;
 7     spaces = deleteSpace(str);
 8     printf("we have removed %d spaces",spaces);
 9     return 0;
10 }
11 int deleteSpace(char *pstr)
12 {
13     int len1 = strlen(pstr);
14     char *p,*q;
15     p=pstr;
16     while(*p!=' ') p++;
17     q=p;
18     while(1)
19     {
20         while(*q==' '||*q!='\0') q++;
21         if(*q=='\0')
22         {
23             *p=*q;
24             break;
25         }
26         else
27         {
28             *p=*q;
29             *q=' ';
30             q++;
31             p++;
32         }
33     }
34     int len2 = strlen(pstr);
35     int count = len1-len2;
36     return count;
37 }
复制代码

这样就可以以时间复杂度为O(n),实现这个函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值