0

関数が何をするのかを明確にするのに苦労しているので、皆さんに例を示したいと思います。プログラムを開いて、次のテキストファイルをスキャンするとします。

「猫はオンドリを追いかけて無駄になりました。」

基本的に、私が書き込もうとしている関数は、1文字の単語がいくつあるか(ある場合)、2文字の単語がいくつあるか、3文字の単語がいくつあるかなどを出力することになっています。

"長さカウント

     2    2
     3    3 
     5    2 
     6    1 
     7    1

「」

これが私の試みです:

int word_length(FILE *fp, char file[80], int count)//count is how many total words there are; I already found this in main()
{
  printf("Length\n");
  int i = 0, j = 0;
  while(j < count)
  {
    for(i = 0; i < count; i++)
    {
      if(strlen(file[i] = i)
        printf("%d\n", i);
    }//I intended for the for loop to print the lengths
  ++i;
  printf("Count\n");
  while()//How do you print the counts in this case? 
  }
} 

ループを設定する方法では、同じ長さの単語が2回印刷されると思います...したがって、次のようになりますが、これは誤りです。では、どのようにループを設定する必要がありますか?

"長さカウント

     2    1
     2    2

「」

4

2 に答える 2

3

これは宿題のように聞こえるので、私はあなたのためにコードを書きませんが、あなたにいくつかの手がかりを与えます。

  1. 複数の値を保持するには、配列が必要になります。インデックスiの要素には、長さiの単語のカウンターが含まれます。
  2. 単語の境界(スペース、ピリオド、行頭など)を識別する方法を見つけます。次に、境界間の文字数を数えます。
  3. 関連するカウンターを増やします(ヒント1を参照)。繰り返す。

いくつかの詳細。実際には、あるものを別のものにマッピングする必要があります。つまり、単語の長さをそのような単語の数にマッピングします。マッピングには、通常ハッシュ(テーブル)またはディクショナリと呼ばれる特別なデータ型があります。しかし、あなたの場合、キーは均一で継続しているため、配列は完全にマップとして機能します(1,2 ...最大単語長まで)。

于 2013-02-21T00:27:19.757 に答える
1

1つのintを使用してすべてをカウントすることはできません。配列が必要です。次に、位置0で1文字の単語の数を追跡し、位置1で2文字の単語を累積します。

于 2013-02-21T00:23:02.657 に答える