我有一个需要按升序排序的结构:
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;
}
}
当我执行上面的代码时,它似乎没有对它进行排序,而是搞砸了结构的布局,即当我将结构的内容导出到文件时,所有内容都以错误的列顺序出现,虽然它没有问题,但如果没有进行比较,则排序顺序错误。
答案 0 :(得分:5)
你正在比较指针,这肯定不是你想要的。这是比较结构的一种方法:
struct tm
填写所需的详细信息并致电mktime
time_t
个值,可以使用difftime
这听起来像很多工作,而且确实如此!如果您愿意使用一些非便携式设备,可以尝试将字符串转换为struct tm
s的精彩strptime
。
答案 1 :(得分:0)
您似乎正在比较字符指针,并根据您正在做出决定。但您必须比较日期和时间值以进行排序。 因为它们都是字符串,所以你应该解析字符串,在不同的变量中获得年,月,日,小时,秒。 现在你可以使用
mktime()
它将以time_t格式返回它。现在您可以轻松地比较它们并相应地进行排序。