C结构问题
我有一个单词列表及其相应的频率:
word 10
the 50
and 35
overflow 90
我应该如何在结构中保存这些数据?我应该使用二维数组吗?我还应该注意,我必须按照它们的频率对它们进行排序,所以我想某种数组然后应用qsort,但是我需要保留整数,所以如果我使用char数组我必须来回执行< / p>
答案 0 :(得分: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;
}
答案 1 :(得分:1)
如果您知道要处理的字符串的最大字符数,则意味着在结构中使用数组和int数据类型。
typded struct _data
{
char word[MAX_CHARS];
int freq;
}DATA;
...
DATA *d = malloc(sizeof(DATA) * n);
如果您不知道word
的最大字符,请转到指针字符char *word;
。在这种情况下,将对每个条目进行内存分配,这将影响性能,并且会导致更多碎片。
最好只分配一块内存,而不是为n
次分配小内存。
答案 2 :(得分:1)
您还可以拥有一个std :: pair
数组然后,您可以根据第二个元素运行您想要对数组进行排序的任何排序算法。 例如,您将拥有:
std :: pair myArray [size];
答案 3 :(得分:0)
定义结构类型,如
struct wordAndFrequency
{
char *word;
int count;
};
然后获取struct wordAndFrequency
和qsort
的数组。
答案 4 :(得分:0)
typedef struct Dict {
char *word;
int frequency;
} Dictionary;
现在创建此结构对象的数组并将其用作hashmap。当你遇到一个单词时,看看这个单词是否存在,增加计数器,否则将该单词添加为count为1。
Dictionary *dictionary=(Dictionary*)malloc(sizeof(Dictionary)*SIZE);