0

C结构题

我有一个单词列表及其相应的频率:

word 10
the 50
and 35
overflow 90

我应该如何将这些数据保存在结构中?我应该使用二维数组吗?我还应该注意我必须按它们的频率对它们进行排序,所以我在考虑某种数组然后应用 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 数组

然后你可以运行任何你想根据第二个元素对数组进行排序的排序算法。例如,您将拥有:

std::pair myArray[大小];

于 2013-01-25T21:06:02.080 回答
0

定义结构类型,例如

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

然后拿一个数组struct wordAndFrequencyqsort那个。

于 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 回答