0

ファイルから (そして後でコンソール入力から) 単語を抽出し、出現回数を数えて Word 構造に保存したいと考えています。

typedef struct cell{
        char *info; /* word itself */
        int nr;     /* number of appearances of the word *
        }*Word; 

この構造は、ファイルに含まれる単語の数に応じて動的に割り当てられます。この関数を考えてみましょう:

void Word_Allocation (Word* a) /* The function that allocates space for one structure */

私の質問は次のとおりです。

  1. ファイルを正しく開き、1 行ずつ読み取るにはどうすればよいですか?
  2. 構造体に単語と出現回数を正しく保存するにはどうすればよいですか?
4

2 に答える 2

1

アロケータ関数は a を返しWord*、単語自体に割り当てるサイズを受け取る必要があります。おそらく、次のようなものです。

Word * Word_Allocation (size_t size) {
    Word *w = malloc(sizeof(*w));
    if (w) w->info = malloc(size);
    if (!w->info)
    {
        free(w);
        w = NULL;
    }
    return w;
}

次の方法で、一度に単語を読むことができます。

#define STR(x) #x
enum {MAX_BUF = 100};
char buf[MAX_BUF];
fscanf(infile, "%" STR(MAX_BUF) "s", buf);

そして、strlen(buf)+1に渡すサイズWord_Allocationです。または、渡しbufWord_Allocation呼び出しstrlenてデータをコピーすることもできます。

于 2013-04-02T22:32:21.783 に答える