【问题标题】:Using qsort on a struct that contains strings在包含字符串的结构上使用 qsort
【发布时间】:2016-12-03 13:45:03
【问题描述】:

我想在我的程序中使用 qsort() 函数。

我想按字符串对这个结构进行排序。

我只是指点一下。

我搜索了互联网,但没有得到它。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmpstr(const void* a, const void* b)

{
    const char* aa = *(const char**)a;
    const char* bb = *(const char**)b;
    return strcmp(aa,bb);
}

typedef struct
{   int x;
    char a[10];

}alex;
int main()
{
    alex vd[10];
int i;
//vd=malloc(sizeof(struct alex)*2);
strcpy(vd[0].a,"dinamitte");
strcpy(vd[1].a,"alex");
printf("Before : \n");
for(i=0;i<=1;i++)
    printf("%s ",vd[i].a);

//qsort(v,1,sizeof (v) ,myCompare);
int n=2;
//qsort(v, 2, sizeof (char *), cstring_cmp);
qsort(vd,n  ,sizeof(alex),cmpstr);
//qsort()
printf("\nAfter : \n");
for(i=0;i<=1;i++)
    printf("%s \n",vd[i]);
    return 0;
}

编译后,它会在屏幕上显示“dinamitte”和“alex”,然后是一些奇怪的字符。

【问题讨论】:

  • 您的cmpstr 函数错误。因为alex 成员的顶部有int
  • 但我不应该返回一个值吗?
  • 还有printf("%s \n",vd[i]); 错字为printf("%s \n",vd[i].a);
  • 你太棒了:)

标签: c arrays struct qsort


【解决方案1】:

像这样修复:

typedef struct {
    int x;
    char a[10];
} alex;

int cmpstr(const void* a, const void* b){
    const alex *aa = a;
    const alex *bb = b;
    return strcmp(aa->a, bb->a);
}

还有printf("%s \n",vd[i]); 错字为printf("%s \n",vd[i].a);

【讨论】:

  • 如果想替换那个“typedef”?它应该是什么样子?
  • @AlexandruBucurie 必须在与cmpstr一起使用之前定义。
  • 如果我有怎么办
  • struct oras { int id ;结构 loc adresa ;结构 comandaa comanda ;工会bani_ramasi bani;结构角色客户端; } ;
  • 结构角色 { int VIP ;字符数[30]; } ;
猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 2012-05-13
  • 2020-04-20
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多