c语言任务 05-05-13 日期识别3

img

img


任务05-05-13 日期识别3
怎么写,快崩溃了,不知道从哪下手。碰过类似的题,前面的题还好,到这里不会了。

供参考:

#include<stdio.h>
int is_leap_year(int y)  // 判断是否闰年
{
    return ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0);
}
int DaysOfMonth(int y, int m) // 某月的天数
{
    int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (is_leap_year(y) && m == 2)
        return  days[m - 1] + 1;
    return days[m - 1];
}
int is_valid_date(int y, int m, int d) //判断日期是否合法
{ 
    if (y < 1 || y > 9999 || m < 1 || m > 12 || d < 1 || d > 31)
        return 0;
    return  d <= DaysOfMonth(y, m);
}
void compare(int* a, int* b, int* c)
{
    int t;
    if (*a > *b) t = *a, * a = *b, * b = t;
    if (*a > *c) t = *a, * a = *c, * c = t;
    if (*b > *c) t = *b, * b = *c, * c = t;
}
int main()
{
    int a, b, c, num = 0, valid_date[6][3] = { 0 };
    scanf("%d%*c%d%*c%d", &a, &b, &c);
    compare(&a, &b, &c);
    if (is_valid_date(a, b, c)) {
        valid_date[num][0] = a;
        valid_date[num][1] = b;
        valid_date[num][2] = c;
        num++;
    }
    if (is_valid_date(a, c, b) && b != c) {
        valid_date[num][0] = a;
        valid_date[num][1] = c;
        valid_date[num][2] = b;
        num++;
    }
    if (is_valid_date(b, a, c) && a != b) {
        valid_date[num][0] = b;
        valid_date[num][1] = a;
        valid_date[num][2] = c;
        num++;
    }
    if (is_valid_date(b, c, a) && c != b) {
        valid_date[num][0] = b;
        valid_date[num][1] = c;
        valid_date[num][2] = a;
        num++;
    }
    if (is_valid_date(c, a, b) && a != c && b != c)
    {
        valid_date[num][0] = c;
        valid_date[num][1] = a;
        valid_date[num][2] = b;
        num++;
    }
    if (is_valid_date(c, b, a) && a != c && a != b) {
        valid_date[num][0] = c;
        valid_date[num][1] = b;
        valid_date[num][2] = a;
        num++;
    }
    if (num == 0) 
        printf("Invalid Date!");
    else {
        printf("%d\n", num);
        for (num--; num >= 0; num--) {
            printf("%04d-%02d-%02d", valid_date[num][0], valid_date[num][1], valid_date[num][2]);
            if (num)  printf("\n");
        }
    }
    return 0;
}

【以下回答由 GPT 生成】

问题:如何在C语言中识别日期?

解决方案: 1. 首先,你需要定义一个数据结构来表示日期。可以使用一个结构体来存储年、月、日等信息。例如: c typedef struct { int year; int month; int day; } Date;

  1. 接下来,你可以编写一个函数来解析输入的日期字符串,并将其转换为Date结构。这个函数可以使用C语言的字符串处理函数,例如strtok和atoi等。下面是一个示例代码: ```c // 解析日期字符串,并将其转换为Date结构 Date parseDate(const char dateString) { Date date; char token;

    // 使用strtok将日期字符串分割为年、月、日 token = strtok(dateString, "-"); date.year = atoi(token);

    token = strtok(NULL, "-"); date.month = atoi(token);

    token = strtok(NULL, "-"); date.day = atoi(token);

    return date; } ```

  2. 在主函数中,你可以接收用户输入的日期字符串,并调用parseDate函数来解析日期。下面是一个示例代码: ```c int main() { char dateString[10]; Date date;

    printf("请输入日期(格式为yyyy-mm-dd):"); scanf("%s", dateString);

    date = parseDate(dateString);

    printf("解析结果:%d年%d月%d日", date.year, date.month, date.day);

    return 0; } ```

以上是一种基本的方法来识别日期。你可以根据实际情况进行修改和优化。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^