2016-11-08 9 views
-1

文字列内の単語の長さとその単語の出現回数を調べようとしています。また、私は単語の平均の長さを見つける必要があります。Cで文字列を操作して、ユーザー入力とバッファ長が80

5 character word occurred 5 times 
9 character word occurred 2 times 
average length of the word is 5.6 

私はこれまでこれを持っていますが、出現と文字を理解することはできません。平均はうまく動作します。

int ch; 
int numWords = 0; 
int numLetters = 0; 
bool prevWasASpace = true; //spaces at beginning are ignored 

printf("Enter a sentence: "); 
while ((ch = getchar()) != EOF && ch != '\n') 

{ 
    if (ch == ' ') 
     prevWasASpace = true; 
    else 
    { 
     if (prevWasASpace) 
      numWords++; 
     prevWasASpace = false; 
     numLetters++; 
    } 
} 

if (numWords > 0) 
{ 
    double avg = numLetters/(float)(numWords); 
    printf("Average word length: %.1f (C = %d, N = %d)\n", avg, numLetters, numWords); 
} 
else 
    printf("You didn't enter any words\n"); 

return 0; 

一つの最後の質問、どのように私は入力の4000個の文字を入力しますが、一度に80を取る?私は、大きな文字列を入力した場合、それは一度に80文字のためにこれを行うだろうが、実行されますすべての統計情報

答えて

0

各単語の語数を保存/保存する方法が必要です。配列のインデックスは、単語の中にいくつの文字があるかを示します(1文字の単語数がindex [0]に入り、2文字の単語数がindexになります) [1]など)このアプローチの問題点は、最大単語長を選択する必要があり、それは配列の長さになります。しかし、あなたは80文字までしか受け入れるつもりはないので、それはあなたの最大単語長になる可能性がありますので、配列の長さ80を宣言することができます。

80文字の入力を制限するには、あなたが80ヒットしたときにループから脱出する。HTH。

(注:あなたが上で説明したことの後に他のことを続行していて、他のものに追加の入力が含まれている場合は、80文字以上の入力を処理する必要があります。しかし、それはあなたの課題の一部ではないように見えるので、あなたは「控えめ」で、その入力を無視して、終了時にプログラムを終了するだけで)離れていくことができます。

+0

どのようにすればよいか分からないことは、各単語の文字を個別に数える方法です。私は文字列全体を数える方法を知っています。個々の単語ではなく、これで私はこれを終了できません。 – G10

+0

シンプルな解決策は、2つのカウンターを手紙のために保持することです.1つはカウンターを保持し、もう1つは新しい単語に出会うたびにゼロにリセットされます。 –

関連する問題