定义一个日期结构体保存日期,具体信息为:年、月、日
判断出生日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。
关于#c语言#的问题: 定义一个日期结构体保存日期,具体信息为:年、月、日 判断出生日期的格式是否合法时,9-10位表示的日期分别转换成整数
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qfl_sdu 2021-09-07 23:56关注
如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct StDate { int year,mon,day; StDate(){} StDate(int y,int m,int d) { year = y; mon = m; day = d; } }; int isValid(char* str,struct StDate *st) { int falg = 1,i; char tmp[8] = {0}; int year,mon,day; //判断长度 if(strlen(str) != 10) return 0; //判断第5/8位是否是- if(str[4] != '-' || str[7] != '-') return 0; //判断1-4,6-7/9-10是否是数字 for ( i = 0;i<4;i++) { if(str[i] < '0' || str[i] > '9') return 0; } for (i = 5;i<7;i++) { if(str[i] < '0' || str[i] > '9') return 0; } for (i = 8;i<10;i++) { if(str[i] < '0' || str[i] > '9') return 0; } strcpy_s(tmp,4,str); year = atoi(tmp); strcpy_s(tmp,2,str+5); tmp[3] = 0; mon = atoi(tmp); strcpy_s(tmp,2,str+8); tmp[3] = 0; day = atoi(tmp); if(year < 0) return 0; if(mon < 1 || mon > 12) return 0; if(mon == 2) { //判断是否是闰年 if (year%4 == 0 && year%100 != 0) { if(day < 1 || day > 29) return 0; }else { if(day < 1 || day > 28) return 0; } }else if (mon == 1 || mon == 3 || mon == 5 || mon== 7 || mon == 8 || mon==10 || mon==12) { if(day <1 || day >31) return 0; }else { if(day < 1 || day > 30) return 0; } st->year = year; st->mon = mon; st->day = day; return 1; } int main() { char buf[20]={0}; struct StDate dt; scanf("%s",buf); if (isValid(buf,&dt)) { printf("合法,日期:%d-%d-%d\n",dt.year,dt.mon,dt.day); }else printf("不合法\n"); return 0; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 对于相关问题的求解与代码
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制