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