用C语言写一个函数,去除字符串中的空格,并返回删除的空格的个数。不允许开辟新的空间,只能申请简单类型的自动变量。时间复杂度要求为O(n)。
比如:char str[]="dhkak df d fd fdjfkda dfd ff f fd da ";
处理之后: str[]="dhkakdfdfdfdjfkdadfdffffdda";
返回删除空格的个数为:12
算法思想:
先取字符串的长度,然后用前后各一个指针,分别为p,q,使前面一个指向空格,后面一个指向字符,然后用后面的值替换前面的空格,然后用空格替换;p指向下一个空格,q指向下一个值,直到p指向'\0'跳出循环,计算此时字符串的长度,再用处理之前的长度减去处理之后的长度,就可以得到删除的空格的个数。
代码如下:
用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()
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;
这样就可以以时间复杂度为O(n),实现这个函数。
手与大脑的距离决定了理想与现实的相似度