Qsort字符串结构

时间:2014-12-14 20:02:18

标签: c string struct qsort

拜托,你能用qsort的字符串结构来帮助我吗? 我需要在字典中对字母词进行排序。问题是,它抛出了我的分段错误... 这是我的结构:

typedef struct {
    int length;
    char *data;
} Word;

typedef struct {
    int length;
    int index;
    Word *data;
} Dictionary;

这是比较功能:

int compare(const void *a, const void *b) 
{ 
    return strcmp (((Word *)a)->data, ((Word *)b)->data);
} 

这是qsort实现:

qsort(&dictionary, dictionary.index, sizeof (Word *), compare); 

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您正在尝试qsort字典结构而不是字典数据。

qsort(dictionary.data, dictionary.index, sizeof (Word *), compare); 

您还应该仔细检查以确保dictionary.index是字典的长度,而不是dictionary.length

答案 1 :(得分:0)

您应该对词典的单词列表进行排序,而不是对词典进行排序。如果length是Word列表中所有元素的数量,则应使用:

qsort(dictionary.data, dictionary.length, sizeof (dictionary.data[0]), compare);

并且,你是对的,你的比较函数是错误的,例如。

int compare(const void *a, const void *b) 
{ 
  const Word *x = a, *y =b;
  return strcmp (x->data,y->data); /* if data always contains a C string */
}