基于日期和时间元素对结构进行排序

Boa*_*rdy 0 c sorting qsort

我有一个结构,我需要按升序排序:

typedef struct CallLogSearchDataStruct
{
    char * date;
    char * time;
    char * bParty;
    char * aParty;
    float duration;
    char * cleardownCause;
    struct CallLogSearchOutboundStruct * outboundLegs;
    int maxDataCol;
} callLogSearchDataStruct;
Run Code Online (Sandbox Code Playgroud)

我需要根据日期和时间按升序对结构进行排序.日期和时间采用以下格式

日期:16/05/2011时间:01:20:03

我需要按升序对上面的两个字段进行排序,我一直在看qsort,但我无法找到一种能够做到这一点的方法.我按以下方式调用该函数.

qsort(callLogSearchData, dataRow, sizeof(callLogSearchDataStruct), sortCompare);
Run Code Online (Sandbox Code Playgroud)

我的功能如下

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的代码时,它似乎没有对它进行排序,而是搞砸了结构的布局,即当我将结构的内容导出到文件时,一切都以错误的列顺序出现,而它是很好,但如果没有进行比较,则排序顺序错误.

cni*_*tar 5

你正在比较指针,这肯定不是你想要的.这是比较结构的一种方法:

  • 解析字符串并提取单个组件,如年,月等
  • 填写一个struct tm与所需的详细信息,并调用mktime就可以了
  • 此时,您有2个time_t可以比较的值difftime

这听起来像是很多工作,而且确实如此!如果你愿意去一点非便携式,你可以尝试strptime将字符串转换为struct tms 的精彩内容.