我的结构为:
struct stored
{
char *dates; // 12/May/2010, 10/Jun/2010 etc..
};
// const
struct stored structs[] = {{"12/May/2010"}, {"12/May/2011"},
{"21/May/2009"}, {"13/May/2011"},
{"10/May/2011"}, {"19/May/2011"}};
我想要做的是用stored.dates对存储的结构进行排序。
qsort(structs, 9, sizeof(struct stored*), sortdates); // sortdates function
我不太确定那些日子的好方法是什么?将它们比作c字符串?
答案 0 :(得分:1)
我会使用以下内容将日期转换为数字:
year * 10000 + month * 100 + day;
然后进行简单的数字比较(对于月份,你需要从Jan到1,从2月到2等地图。)
如果您正在进行大量比较,您可能希望在结构中缓存数字等效项。
答案 1 :(得分:1)
如果您将日期转换为YYYYMMDD
格式(如20100314
),则可以将它们作为字符串或整数(转换后)进行比较。
答案 2 :(得分:1)
ISO 8601格式的日期(“YYYYMMDD”或“YYYY-MM-DD”等)与C字符串相当。您的格式不是 - 会更改日期字符串的格式吗?
PS:如果你摆脱了“ - ”,你甚至可以将日期存储为普通的32位整数。根据您的应用程序对这些日期的处理,这可能是额外的奖励。
答案 3 :(得分:0)
您无法将这些作为字符串进行比较,但您可以比较子字符串。比较这些年份,如果它们不相等,你就得到了答案。接下来比较几个月,您需要某种表来按名称订购月份。最后,如果月份相同,则比较日期。