2014-10-31 88 views
0
#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    unsigned long c; 
    unsigned long line; 
    unsigned long word; 
    char ch; 

    c = 0; 
    line = 0; 
    word = 0; 

    while((ch = getchar()) != EOF) 
    { 
     C++; 
     if (ch == '\n') 
     { 
      line ++; 
     } 
     if (ch == ' ' || ch == '\n' || ch =='\'') 
     { 
      word ++; 
     } 
    } 
    printf("%lu %lu %lu\n", c, word, line); 
    return 0; 
} 

我的程序大部分工作正常,但是當我添加額外的空格時,它將空格計爲額外的單詞。因此,例如,不計算空格作爲字c

How  are  you?
被計爲10個單詞,但我希望它計爲3個單詞。我如何修改我的代碼以使其工作?

+0

當您看到連續的空格時,您必須修改邏輯以* not * count(即不增加'word')。 – 2014-10-31 21:50:29

+2

這是因爲你編寫了'if(ch ==''...)word ++;'。你讀的每個空間都會增加字數。 – 2014-10-31 21:52:23

+0

這一行:while((ch = getchar())!= EOF)將失敗,因爲ch被定義爲一個char並且EOF是一個比char更長的int,所以比較總是會導致false,所以循環永遠不會退出。 – user3629249 2014-11-01 02:29:29

回答

-1

這是一個可能的解決方案:

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    unsigned long c; 
    unsigned long line; 
    unsigned long word; 
    char ch; 
    char lastch = -1; 

    c = 0; 
    line = 0; 
    word = 0; 

    while((ch = getchar()) != EOF) 
    { 
     C++; 
     if (ch == '\n') 
     { 
      line ++; 
     } 
     if (ch == ' ' || ch == '\n' || ch =='\'') 
     { 
      if (!(lastch == ' ' && ch == ' ')) 
      { 
       word ++; 
      } 
     } 
     lastch = ch; 
    } 
    printf("%lu %lu %lu\n", c, word, line); 
    return 0; 
} 

希望這有助於,祝你好運!

+0

在循環開始之前,不應該'lastch = ch;'在循環的末尾,但是'lastch = -1'? – 2014-10-31 21:54:19

+0

@WeatherVane是的,WHOOPS!正在修復... – phantom 2014-10-31 21:55:41

+0

@WeatherVane我們走了,謝謝:) – phantom 2014-10-31 21:58:14

0

我找到了一種方法來計算的話和他們之間的幾個空格,程序將只計算的話,而不是幾個空格也作爲話 這裏是代碼:

nbword是單詞的數量,c是鍵入的字符和prvc是以前輸入的字符。

#include <stdio.h> 

int main() 
{ 
    int nbword = 1; 
    char c, prvc = 0; 

    while((c = getchar()) != EOF) 
    { 
     if(c == ' ') 
     { 
      nbword++; 
     } 
     if(c == prvc && prvc == ' ') 
      nbword-; 
     if(c == '\n') 
     { 
      printf("%d\n", nbword); 
      nbword = 1: 
     } 
     prvc = c; 
    } 
    return 0: 
} 
+1

請不要包含您的代碼的圖像,幷包含代碼本身。您可能需要[編輯](https://stackoverflow.com/posts/46503695/edit)您的答案。 – LW001 2017-09-30 14:56:34