日期排列按大小C语言,C语言 日期(年月日 ) 排序

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

}

再问: 不好意思,那个年份的输入08年一定要输入08,而不是8,能帮忙改一下么。

再答: 修改版如下: #include "stdio.h" #include "string.h" //日期结构体 struct date { char y[3];//年 char m[4];//月 int d;//日 }; //新增加,将字符串表示的年份转成整形表示 int intY(char *a) { int k = 0; k += a[0] - '0';//十位上的数值 k = k*10 + (a[1] - '0');//十位上的数值乘以10再加上个位上的数值 return k; } //比较年份(修改后,参数类型变了) int cmpY(char *y1, char *y2) { //新增加两条语句 int a = intY(y1); int b = intY(y2); //年份在90-10之间,代表1990年到2010年 if (a < 100 && a > 10) a += 1900; else a += 2000; if (b < 100 && b > 10) b += 1900; else b += 2000; if (a > b) return 1; else if (a == b) return 0; else return -1; } //比较月份 int cmpM(char *a, char *b) { //定义字符串数组,表示12个月份的英文 char m[12][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; int i, j; for (i = 0; i < 12; i++) if (strcmp(a,m[i]) == 0) break; for (j = 0; j < 12; j++) if (strcmp(a,m[j]) == 0) break; if (i < j) return 1; else if (i == j) return 0; else return -1; } //综合年,月,日比较 int cmpYMD(struct date a, struct date b) { if (cmpY(a.y,b.y) == -1) return -1; else if (cmpY(a.y,b.y) == 1) return 1; else { if (cmpM(a.m,b.m) == -1) return -1; else if (cmpM(a.m,b.m) == 1) return 1; else { if (a.d > b.d) return 1; else if(a.d == b.d) return 0; else return -1; } } } void main() { //定义结构体数组 struct date dt[3]={ {"00", "Jan", 11}, {"99", "Feb", 22}, {"08", "Mar", 2}}; struct date dtTemp; int i, j; //排序 for (i = 0; i < 3-1; i++) for (j = i+1; j < 3; j++) if (cmpYMD(dt[i],dt[j]) == 1) { dtTemp = dt[i]; dt[i] = dt[j]; dt[j] = dtTemp; } //输出排序过后的日期 for (i = 0; i < 3; i++) { //修改输出格式 printf("%s %s %d\n",dt[i].y,dt[i].m,dt[i].d); } }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值