c - 根据日期和时间元素对结构进行排序

标签 c sorting qsort

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

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/

相关文章:

javascript - 在javascript中按降序对日期和时间进行排序

python - 自定义排序 pandas 数据框

c - 为什么 qsort 中的排序方法改变了我的数组?

c - 为什么可以使用具有错误签名的比较函数调用 `qsort` 并且编译没有警告

c - RAW-Sockets 应该忽略 MTU

c - 损坏的二分搜索和冒泡排序

c - 迭代 LinkedList 时出现 SegFault

c - 返回 float 的指数值

vba - 从 VBA 组合框中删除重复项

c++ - 必须使用 '.*' 或 '->*' 来调用 'lessThan (...)' 中的指向成员函数的指针,例如 '(... ->* lessThan) (...)'