0

C構造の質問

単語とそれに対応する頻度のリストがあります。

word 10
the 50
and 35
overflow 90

このデータを構造体に保持するにはどうすればよいですか? 2 次元配列を使用する必要がありますか? また、それらを頻度でソートする必要があることに注意する必要があるため、ある種の配列を考えてqsortを適用しますが、整数を保持する必要があるため、char配列を使用する場合はキャストを行ったり来たりする必要があります

4

5 に答える 5

2

おそらく構造体:

struct WordInfo {
    char *word;
    int frequency;
};

次に、これらの構造体の配列を作成できます。

struct WordInfo words[128]; // whatever

最後に、次のようなコンパレータ関数を記述します。

int word_compare(const void *p1, const void *p2)
{
    struct WordInfo *s1 = p1;
    struct WordInfo *s2 = p2;
    return s1->frequency - s2->frequency;
}
于 2013-01-25T19:10:16.040 に答える
1

処理しようとしている文字列の最大文字数がわかっている場合は、構造内で配列および int データ型を使用することを意味します。

typded struct _data
{
   char word[MAX_CHARS];
   int freq;
}DATA;
...

DATA *d = malloc(sizeof(DATA) * n);

wordgo for pointer charaterの最大文字数がわからない場合char *word;。この場合、パフォーマンスに影響を与えるエントリごとにメモリ割り当てが発生し、断片化がさらに発生します。

小さなメモリを何度も割り当てるよりも、メモリのチャンクを一度に割り当てるほうがよいでしょうn

于 2013-01-25T19:16:00.553 に答える
1

std::pair の配列を持つこともできます

次に、2 番目の要素に基づいて配列を並べ替える任意の並べ替えアルゴリズムを実行できます。たとえば、次のようになります。

std::pair myArray[サイズ];

于 2013-01-25T21:06:02.080 に答える
0

次のような構造タイプを定義します

struct wordAndFrequency
{
  char *word;
  int count;
};

struct wordAndFrequency次に、との配列を取りqsortます。

于 2013-01-25T19:08:18.653 に答える
0
typedef struct Dict {
  char *word;
  int frequency;
} Dictionary;

この構造体オブジェクトの配列を作成し、ハッシュマップとして使用します。単語に出くわしたら、その単語がそこにあるかどうかを確認し、カウンターをインクリメントします。そうでない場合は、カウントを 1 としてこの単語を追加します。

 Dictionary *dictionary=(Dictionary*)malloc(sizeof(Dictionary)*SIZE);
于 2013-01-25T19:09:13.043 に答える