用較小的代價去除字符串中的空格


題目:

  用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),實現這個函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM