使用qsort排序结构数组

时间:2014-01-15 15:19:15

标签: c arrays file qsort

#include <stdio.h>

typedef struct  
{  int occurrence
   char  charArray[101]; 
}Wordy;


int comparing(const void *a, const void *b) 
{
   //....
}

int main(void)
{  
        int i=0;
    Wordy array[99999];

  //.....



    return 0;

}

*/

该程序从文件中读取单词,然后计算单词的出现次数。一切正常,但我认为qsort功能在比较功能中没有正常工作。它假设根据array的出现进行排序。 (发现它的发生是正确的。)

我的示例文本文件:

zero one
two zero
three three

输出:

Before: zero one two three 

After:  one two three 

(注意排序后零缺失)

2 个答案:

答案 0 :(得分:2)

此:

qsort(array, i, sizeof(int), comparing);

错误,array不是int的数组,它是Wordy的数组。当您将错误的元素大小指定为qsort()时,结果或多或少是随机的,因为您将获得指向int结构数组的Wordy大小“切片”的指针。

尝试:

qsort(array, i, sizeof array[0], comparing);

答案 1 :(得分:0)

是因为您的printf陈述不同吗? wordcharArray订购的方式不同。

在:

array [0] .charArray,array [1] .word, array [2] .charArray,array [3] .charArray);

后:

array [0] .word,array [1] .charArray, array [2] .charArray,array [3] .charArray);