2017-01-17 14 views
0

プログラムを作成しようとしているので、各行の単語を数えます。Cの各行の単語を数える方法

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#define NUM_LINES 50 

int main() 
{ 
char text[NUM_LINES]; 
int count = 0; 
int nw = 0; 
char *token; 
char *space = " "; 
printf("Enter the text:\n"); 

while (fgets(text, NUM_LINES, stdin)){ 

    token = strtok(text, space); 

    while (token != NULL){ 

     if (strlen(token) > 0){ 
      ++nw; 
     } 
     token = strtok(NULL, space); 
    } 


    if (strcmp(text , "e") == 0 || strcmp(text , "e\n") == 0){ 
     break; 
    } 


} 
printf("%d words", nw-1); 

return 0; 
} 

は、例えば入力がある場合:

Hello my name is John 
I would like to have a snack 
I like to play tennis 
e 

私のプログラムは、私が個別に各ライン上の単語を数えるんか(この場合は17)、総単語を出力します。だから私が望む出力はこの例では「5 7 5」です。

+0

最後の単語の後と ''\ n' 'の前にスペースがあると、コードが正しくカウントされません。 – chux

+0

私はそれをする必要はありません私はちょうどそれが働くようにしたい。私はこれらの種類のエラーについて今は気にしません –

答えて

4

各行の単語を個別にカウントするにはどうすればよいですか?

単にローカルカウンタline_word_countを追加してください。

区切りリストを最後の単語の後のスペースに対応するように拡張することを提案してください。

char *space = " \r\n"; 

while (fgets(text, NUM_LINES, stdin)){ 
    int line_word_count = 0; 
    token = strtok(text, space); 
    while (token != NULL){ 
     if (strlen(token) > 0){ 
      line_word_count++; 
     } 
     token = strtok(NULL, space); 
    } 
    if (strcmp(text , "e") == 0 || strcmp(text , "e\n") == 0){ 
     break; 
    } 
    printf("%d ", line_word_count); 
    nw += line_word_count; 
} 
printf("\n%d words\n", nw); 
+0

これは、単語の総量(最後のprint文)を表示しているので、この動作がどうなるか分かりません。また、print文をwhileループに入れて、Enterを押すたびに印刷するようにしました。私は最後に印刷する必要があります(私の例で書いたものを参照してください) –

+0

申し訳ありませんが、この答えは全く役に立たなかった –

+0

@JohnSmith行数を結果として配列 'int line_count [1000];'最後の結果。私のテストは入力にパイプされていたので、出力は入力とインターレースされませんでした。 – chux

関連する問題