我有一个结构需要按升序排序:
typedef struct CallLogSearchDataStruct
{
char * date;
char * time;
char * bParty;
char * aParty;
float duration;
char * cleardownCause;
struct CallLogSearchOutboundStruct * outboundLegs;
int maxDataCol;
} callLogSearchDataStruct;
我需要根据日期和时间对结构进行升序排序。日期和时间格式如下
日期:16/05/2011
时间:01:20:03
我需要按升序对以上两个字段进行排序,我一直在查看 qsort 但我想不出一种方法来做到这一点。我按以下方式调用该函数。
qsort(callLogSearchData, dataRow, sizeof(callLogSearchDataStruct), sortCompare);
而我的功能如下
int sortCompare(const void * a, const void * b)
{
const callLogSearchDataStruct *u1 = a;
const callLogSearchDataStruct *u2 = b;
if (u1->date < u2->date)
{
return -1;
}
else if (u1->date > u2->date)
{
return 1;
}
else
{
return 0;
}
}
当我执行上面的代码时,它似乎没有对其进行排序,而是搞砸了结构的布局,即当我将结构的内容导出到文件时,所有内容都以错误的列顺序出现,而这很好,除了如果未完成比较则排序顺序错误。
最佳答案
你在比较指针,这肯定不是你要找的。这是比较结构的一种方法:
- 解析字符串并提取单个组件,如年、月、日等
- 用所需的详细信息填充
struct tm
并在其上调用mktime
- 此时您有 2 个
time_t
值,您可以使用difftime
比较它们
这听起来工作量很大,而且确实如此!如果你愿意去一点非可移植的,你可以尝试美妙的 strptime
它将字符串转换为 struct tm
。
关于c - 根据日期和时间元素对结构进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19000511/