c语言题目,急求!!!要求利用函数,输入一个日期字符串,然后输出该日期的前一天!
答案:1 悬赏:70
解决时间 2021-02-18 03:02
- 提问者网友:晨熙污妖王
- 2021-02-17 14:19
比如输入20080301,输出20160229
最佳答案
- 二级知识专家网友:没感情的陌生人
- 2021-02-17 15:21
typedef struct {
int y;
int m;
int d;
}Date;
void pre_date(Date* s, Date* p) {
*p = *s;
if (p->d > 1) {
p->d--;
return;
}
p->m--;
switch (p->m) {
case 0:
p->y--;
p->m = 12;
case 1: case 3: case 5: case 7: case 8: case 10:
p->d = 31;
break;
case 2:
p->d = 28;
if (((p->y % 4 == 0)) && !(p->y %100 == 0 && p->y % 400 != 0))
p->d++;
break;
case 4: case 6: case 9: case 11:
p->d = 30;
break;
}
}
void get_date(char*s , Date* d) {
const char fmt[] = "YYYYMMDD";
const char* m = fmt;
d->y = d->m = d->d = 0;
while (*s) {
int *c;
switch (*m) {
case 'Y': c = &d->y;break;
case 'M': c = &d->m;break;
case 'D': c = &d->d;break;
}
*c = *c * 10 + (*s - '0');
m++;
s++;
}
}
int main() {
char str[512];
Date d1, d2;
gets(str);
get_date(str, &d1);
pre_date(&d1, &d2);
printf("%d-%02d-%02d", d2.y, d2.m, d2.d);
return 0;
}
int y;
int m;
int d;
}Date;
void pre_date(Date* s, Date* p) {
*p = *s;
if (p->d > 1) {
p->d--;
return;
}
p->m--;
switch (p->m) {
case 0:
p->y--;
p->m = 12;
case 1: case 3: case 5: case 7: case 8: case 10:
p->d = 31;
break;
case 2:
p->d = 28;
if (((p->y % 4 == 0)) && !(p->y %100 == 0 && p->y % 400 != 0))
p->d++;
break;
case 4: case 6: case 9: case 11:
p->d = 30;
break;
}
}
void get_date(char*s , Date* d) {
const char fmt[] = "YYYYMMDD";
const char* m = fmt;
d->y = d->m = d->d = 0;
while (*s) {
int *c;
switch (*m) {
case 'Y': c = &d->y;break;
case 'M': c = &d->m;break;
case 'D': c = &d->d;break;
}
*c = *c * 10 + (*s - '0');
m++;
s++;
}
}
int main() {
char str[512];
Date d1, d2;
gets(str);
get_date(str, &d1);
pre_date(&d1, &d2);
printf("%d-%02d-%02d", d2.y, d2.m, d2.d);
return 0;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯