如何定义用于在C中保存字符串和数字的数据类型

时间:2013-01-25 19:06:04

标签: c arrays 2d structure frequency

C结构问题

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

word 10
the 50
and 35
overflow 90

我应该如何在结构中保存这些数据?我应该使用二维数组吗?我还应该注意,我必须按照它们的频率对它们进行排序,所以我想某种数组然后应用qsort,但是我需要保留整数,所以如果我使用char数组我必须来回执行< / p>

5 个答案:

答案 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 wordAndFrequencyqsort的数组。

答案 4 :(得分:0)

typedef struct Dict {
  char *word;
  int frequency;
} Dictionary;

现在创建此结构对象的数组并将其用作hashmap。当你遇到一个单词时,看看这个单词是否存在,增加计数器,否则将该单词添加为count为1。

 Dictionary *dictionary=(Dictionary*)malloc(sizeof(Dictionary)*SIZE);