【发布时间】:2014-05-15 05:45:43
【问题描述】:
我有一个需要按升序排序的结构:
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;
}
}
当我执行上面的代码时,它似乎没有对它进行排序,而是搞砸了结构的布局,即当我将结构的内容导出到文件时,一切都以错误的列顺序出现,而这很好,除了如果未完成比较则排序顺序错误。
【问题讨论】:
-
有什么理由不将日期和时间存储在 unix timestamp format 中?您将节省内存,并且比较功能将很简单。
-
现在,您不比较日期,而是比较指向日期的指针。
-
@Michael 主要是因为这是导出到文件时需要的日期格式
-
@Boardy,然后你可以在导出过程中使用ctime。