【问题标题】:Using qsort To Sort Array Of Structs使用 qsort 对结构数组进行排序
【发布时间】:2014-01-15 15:19:15
【问题描述】:
#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 

(注意排序后缺少零)

【问题讨论】:

  • 你指的是array[1].wordarray[0].word,但Wordy没有名为word的成员,这样可以编译吗?

标签: c arrays file qsort


【解决方案1】:

这个:

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

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

试试:

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

【讨论】:

    【解决方案2】:

    是不是因为你的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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2014-07-04
      • 2021-05-08
      • 2014-05-21
      • 2021-07-16
      相关资源
      最近更新 更多