微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要帮助使用 qsort 从结构中排序数组

如何解决需要帮助使用 qsort 从结构中排序数组

我正在学习使用 qsort,但似乎找不到使用 qsort 按字母顺序对“n”个人姓名进行排序的方法

我尝试了很多方法,但大多数方法都给我相同的“表达式必须具有类类型”错误

struct ppl {
    char name[50];
};

ppl vpers[100];

void read_name(ppl* vpers,int n)
{
    for (int i = 0; i < n; ++i) {
        cout << "Name: ";
        cin >> vpers[i].name;
    }
}

void print_name(ppl * vpers,int n)
{
    for (int i = 0; i < n; ++i) {
        cout << vpers[i].name << endl;
    }
}

int compare(const void* a,const void* b)
{
    struct vpers* x = (struct vpers*)a.name;
    const struct vpers* y = (struct vpers*)b.name;    

    if ((struct vpers*)x < (struct vpers*)y) return -1;
    if ((vpers*)x == (vpers*)y) return 0;
    if ((vpers*)x > (vpers*)y) return 1;

    return(*(int*)a - *(int*)b);    
}

int main()
{
    int n;
    cout << "Nr. ppl = ";
    cin >> n;

    ppl* vpers = new ppl[n];

    read_name(vpers,n);
    print_name(vpers,n);

    qsort(vpers,n,sizeof(ppl),compare);

    print_name(vpers,n);

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。