2017-02-23 39 views
0

ありがとうございます。ファイル内の単語、行、文字の数をカウントする

C言語を使用して単語、行、文字の数を数えるコードを作成します。

while((c = fgetc(fp)) != EOF) 
{ 
    if((char)(c) == ' ' || (char)(c) == '\t'){ 
     num_word++; 
     num_char++; 
    } 
    else if((char)(c) == '\n'){ 
     num_line++; 
     num_word++; 
     num_char++; 
    } 
    else{ 
     num_char++; 
    } 
} 

num_word以外はすべて正常に動作します。たとえば、テストケースに空白行がある場合、テストケースはもう1つカウントされます。

example for test 

case 

私のプログラムでは、この問題を解決するための5つの代わりに、4。任意のヒントを数えるでしょうか?

答えて

1

あなたの空白行が1つあるため、あなたのワードカウントは1です。空白行が2つある場合は2以上になります。これは、あなたが改行の単語を数える方法のためです。あなたができる最も簡単なことは、空白行を示す連続した改行がある場合は、単語数をインクリメントしないことです。

char lastChar = ' '; 
while((c = fgetc(fp)) != EOF) 
{ 
    if((char)(c) == ' ' || (char)(c) == '\t'){ 
     num_word++; 
     num_char++; 
    } 
    else if((char)(c) == '\n'){ 
     num_line++; 
     if(lastChar != '\n') 
      num_word++; 
     num_char++; 
    } 
    else{ 
     num_char++; 
    } 
    lastChar = (char)c; 
} 
2

新しい単語の2つのブランチ(区切り文字としてspace\t\n)を使用しています。空白文字が連続すると失敗します。

問題を解決するには、連続する空白文字をスキップするか(カウンタまたはフラグを保持する)、新しい空白以外の文字を新しい単語の先頭に設定します。

Cプログラミング言語K & Rはとても良い例です。

関連する問題