C语言 日期(年月日 ) 排序日期是一个struct格式为 00 Jan 11 // 00年一月 11日99 Feb 22// 99年二月 22日08 Mar 02// 03年三月2日要求按照从小到大排序,年份在90-10之间,代表1990年到2010年.排序当然是年
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 03:24:43
C语言 日期(年月日 ) 排序日期是一个struct格式为 00 Jan 11 // 00年一月 11日99 Feb 22// 99年二月 22日08 Mar 02// 03年三月2日要求按照从小到大排序,年份在90-10之间,代表1990年到2010年.排序当然是年
C语言 日期(年月日 ) 排序
日期是一个struct
格式为 00 Jan 11 // 00年一月 11日
99 Feb 22// 99年二月 22日
08 Mar 02// 03年三月2日
要求按照从小到大排序,年份在90-10之间,代表1990年到2010年.
排序当然是年月日的顺序排,先排年,再排月,再排日.
C语言 日期(年月日 ) 排序日期是一个struct格式为 00 Jan 11 // 00年一月 11日99 Feb 22// 99年二月 22日08 Mar 02// 03年三月2日要求按照从小到大排序,年份在90-10之间,代表1990年到2010年.排序当然是年
#include "stdio.h"
#include "string.h"
//日期结构体
struct date
{
\x09int y;//年
\x09char m[4];//月
\x09int d;//日
};
//比较年份
int cmpY(int a, int b)
{
\x09//年份在90-10之间,代表1990年到2010年
\x09if (a < 100 && a > 10)
\x09\x09a +=1900;
\x09else
\x09\x09a += 2000;
\x09if (b < 100 && b > 10)
\x09\x09b +=1900;
\x09else
\x09\x09b += 2000;
\x09if (a > b)
\x09\x09return 1;
\x09else if (a == b)
\x09\x09return 0;
\x09else
\x09\x09return -1;
}
//比较月份
int cmpM(char *a, char *b)
{
\x09//定义字符串数组,表示12个月份的英文
\x09char m[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
\x09int i, j;
\x09for (i = 0; i < 12; i++)
\x09\x09if (strcmp(a,m[i]) == 0)
\x09\x09\x09break;
\x09for (j = 0; j < 12; j++)
\x09\x09if (strcmp(a,m[j]) == 0)
\x09\x09\x09break;
\x09
\x09if (i < j)
\x09\x09return 1;
\x09else if (i == j)
\x09\x09return 0;
\x09else
\x09\x09return -1;
}
//综合年,月,日比较
int cmpYMD(struct date a, struct date b)
{
\x09if (cmpY(a.y,b.y) == -1)
\x09\x09return -1;
\x09else if (cmpY(a.y,b.y) == 1)
\x09\x09return 1;
\x09else
\x09{
\x09\x09if (cmpM(a.m,b.m) == -1)
\x09\x09\x09return -1;
\x09\x09else if (cmpM(a.m,b.m) == 1)
\x09\x09\x09return 1;
\x09\x09else
\x09\x09{
\x09\x09\x09if (a.d > b.d)
\x09\x09\x09\x09return 1;
\x09\x09\x09else if(a.d == b.d)
\x09\x09\x09\x09return 0;
\x09\x09\x09else
\x09\x09\x09\x09return -1;
\x09\x09}
\x09}
}
void main()
{
\x09//定义结构体数组
\x09struct date dt[3]={
\x09\x09{ 0, "Jan", 11},
\x09\x09{99, "Feb", 22},
\x09\x09{ 8, "Mar", 2}};
\x09struct date dtTemp;
\x09int i, j;
\x09//排序
\x09for (i = 0; i < 3-1; i++)
\x09\x09for (j = i+1; j < 3; j++)
\x09\x09\x09if (cmpYMD(dt[i],dt[j]) == 1)
\x09\x09\x09{
\x09\x09\x09\x09dtTemp = dt[i];
\x09\x09\x09\x09dt[i] = dt[j];
\x09\x09\x09\x09dt[j] = dtTemp;
\x09\x09\x09}
\x09
\x09//输出排序过后的日期
\x09for (i = 0; i < 3; i++)
\x09{
\x09\x09printf("%d %s %d\n",dt[i].y,&dt[i].m,dt[i].d);
\x09}
}