关于#c语言#的问题: 定义一个日期结构体保存日期,具体信息为:年、月、日 判断出生日期的格式是否合法时,9-10位表示的日期分别转换成整数

 定义一个日期结构体保存日期,具体信息为:年、月、日
 判断出生日期的格式是否合法时,需要判断长度是否为10,第5位和第8位是否为’-’,字符,将1-4位表示的年份,6-7位表示的月份,9-10位表示的日期分别转换成整数。判断是否满足构成日期的条件闰年月份只能是1-12之间的数,如果是闰年,二月可以是29天否则不能大于28,1,3,5,7,8,10,12月可以是31天,其余只能小于等于30(建议写成函数)。

如下:

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