供参考:
#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;
接下来,你可以编写一个函数来解析输入的日期字符串,并将其转换为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; } ```
在主函数中,你可以接收用户输入的日期字符串,并调用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; } ```
以上是一种基本的方法来识别日期。你可以根据实际情况进行修改和优化。
【相关推荐】