0

テキスト ファイルで与えられた単語のコレクションを読み取る最も効率的な方法を探しています。

私が書いているプログラムは基本的に Scrabble です。7 つのランダムな文字を生成し (既に行われています)、ユーザーはそれらの文字の任意の数から単語を入力する必要があり (Scrabble のように)、プログラムはその単語をスコア付けします (これも既に行われています)。

私が今直面している問題は、言葉の読み方です。このプロジェクトの一般的な「辞書」のような 80 語のファイルが与えられます。関数を使用するかfopen()、単語を手動で入力することを考えていました(これはひどいでしょう...)。単語を保存する方法という別の問題に直面しています。各列または行が単語である2次元配列を考えていました。10,000 語の制限があり、6 文字を超えることはできません。

これを行う方法に関するヒントは素晴らしいでしょう。

4

1 に答える 1

3

動的に割り当てられた文字列の配列に単語を読み取ります。

  1. ファイル ( fopen()) を開きます。
  2. ファイルの各行を読み取ります ( fgets())。すべてをモノケースにします (すべて大文字、またはすべて小文字; <ctype.h>)。
  3. (必要に応じて) 行を単語に分割します ( <string.h>;strspn()またはstrcspn()おそらく)。
  4. 単語ごとに、十分なメモリを割り当てて、そのメモリにコピーします (strdup()利用可能な場合、そうでない場合は独自に記述します)。
  5. 文字列へのポインターを、動的に割り当てられたポインターの配列 ( malloc()realloc()) に格納します。
  6. 最後にファイルを閉じます ( fclose())。
  7. 迅速な検索のために文字列の配列をソートします ( qsort())。
  8. 二分探索を使用して単語を探します ( bsearch())。

ポインターの配列は言うまでもなく、ポインターについて教えられていない場合でも、手順 1 ~ 3 および 6 ~ 8 を逐語的に使用できます。10,000 x 7 の文字の 2D 配列を事前に割り当て (最大語長が 6 であるため)、使用中の文字数を記録します (単純なカウンター)。どの文字列も 6 文字を超えないようにしてください。合計で 10,000 語を超えないようにしてください。

qsort()この場合、とに必要な比較関数bsearch()は少し異なります。

二分探索の効率を犠牲にして、単純な線形探索を使用することができます。

于 2012-08-27T01:35:22.013 に答える