2015-06-10 93 views
-7

我正在使用下面的代碼計算字符串中的空格,但我不想計算空格。如何不計算空格,同時計算字符串的長度c

#include<stdio.h> 
#include<conio.h> 

void main() 
{ 
    char*ptr,str[30]; 
    int size=0; 
    int word=0; 

    puts("enter the string"); 
    gets(str); 
    fflush(stdin); 

    for(ptr=str;*ptr!='\0',ptr++) 
    { 
     size++; 
    } 

    printf("size of string is = %d",size); 
    getchar(); 
} 
+0

,這是你寫的代碼?沒有新線,沒有空格,什麼都沒有? –

+6

這個python怎麼樣? –

+1

'void main'不是標準c。你使用的是非標準的編譯器嗎? – user2079303

回答

5

TL; DR;回答:當(在該指針位置)的值是空格時跳過計數器(size)增量。

請自行編寫代碼並將結果更新到我們的頁面。

這就是說,恕我直言,第一你應該注意到(正確)的幾件事情,因爲

  1. void main()不達標。改爲使用int main(void)
  2. 千萬不要使用gets()。它嚴重受緩衝區溢出問題困擾。改爲使用fgets()
  3. fflush(stdin)undefined behaviour。儘快擺脫它。
+1

就這個問題而言,只有答案提到'gets' - +1 – szczurcio

+1

@szczurcio和'fflush(stdin)'的邪惡。 :-) –

0

使用指針算術代替嘗試使用以下碼:

while (*ptr) { 
    if (*ptr != ' ') { 
     size++; 
    } 
} 

這將循環通過字符,直到它觸及空終止「\ 0」,並根據需要進行遞增。

+3

這對於手頭的問題來說太過於矯枉過正。鑑於他已經有一個迭代所有角色的循環。只需跳過計數循環內的空格就簡單多了。 – DrKoch

+0

非常好的一點。遍歷字符和忽略空間是解決這個問題的一個非常有效的方法,並給出O(n)。我會改變我的答案。 :) – Arial

0

試試這個

int my_strlen(char *str) 
{ 
int i, j = 0; 
while (str[i] != '\0') 
{ 
    if (str[i] != ' ') 
     ++j; 
    ++i; 
} 
return j; 
} 
+3

另一個擾流器。保持OP從學習。幸運的是,你的代碼有一個bug,所以OP需要學習更多 - 好。 – DrKoch

0

內,您的循環:

跳過空格

計數所有其他字符