【问题标题】:sorting of array based on int value and char value in CC中基于int值和char值的数组排序
【发布时间】:2021-12-11 12:27:27
【问题描述】:

例如我有一个输出数据:

Age:
Name:
Sex: 

还有一个示例输入:

Age: 80
Name: Mary
Sex: F

Age: 100
Name: Bobby
Sex: M

Age: 45
Name: Sara
Sex: F

Age: 20
Name: Sam
Sex: M

我希望按年龄升序对它们进行排序:

Age: 20
Name: Sam
Sex: M

Age: 45
Name: Sara
Sex: F

Age: 80
Name: Mary
Sex: F

Age: 100
Name: Bobby
Sex: M

如何将作为字符数组的 Name 和 Sex 数组关联/标记/附加到作为 int 数组的 Age?

【问题讨论】:

  • “怎么可能关联”。使用struct。那就是有一个struct(或指向此类的指针)的单个数组,其中每个结构存储一个人的字段。
  • 到目前为止你尝试了什么?

标签: c sorting


【解决方案1】:

假设您有一个 Employee 结构,这个 qsort 将为您进行排序。

  int compare( const void* x, const void* y)
     {
     const struct employee *e1 = x;
     const struct employee *e2 = y;
       int a = e1-> Age ;
       int b = e2-> Age ;
       // an easy expression for comparing
       return (a > b) - (a < b);
     }
    
     qsort(values, size, sizeof(struct employee), compare ) 

【讨论】:

  • 你应该 const 限定结构指针。如果您已经拥有正确的结构类型,则此处的强制转换和取消引用:* ( (int*) e1-&gt; Age ) 没有任何意义。它应该是int a = e1-&gt;Age; 等。同时删除“匈牙利表示法”类型的变量名。
  • @Lundin 已编辑。
  • 你只修复了一个错误,仍然没有const 限定符。
  • @Lundin 我不明白你在说什么。你能详细说明一下吗?
  • 不,const struct employee *e1 = x; 是正确的代码。
猜你喜欢
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多