学而思九章大规模-MathGPT-c++
2024-08-13 10:57:08
发布于:广东
4阅读
0回复
0点赞
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
bool isValidDate(const string& date) {
stringstream ss(date);
int year, month, day;
char dash1, dash2;
// 读取并解析日期字符串
if (!(ss >> year >> dash1 >> month >> dash2 >> day) || dash1 != '-' || dash2 != '-') {
return false; // 读取或格式不正确
}
// 检查年份是否在合法范围内
if (year < 1971 || year > 2100) {
return false;
}
// 检查月份和日份是否合法
// 可以通过构建一个月份天数数组来简化检查过程
// 但为了简单起见,这里我们使用一种较为直接但稍低效的方法
if (month < 1 || month > 12) {
return false;
}
// 检查每个月的天数是否合法
// 注意2月闰年的情况
bool isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
if (day < 1 || (month == 2 && day > (isLeapYear ? 29 : 28)) ||
(month == 4 || month == 6 || month == 9 || month == 11 && day > 30) ||
day > 31) {
return false;
}
return true;
}
int main() {
string date;
getline(cin, date); // 读取整行输入
if (isValidDate(date)) {
cout << "NO" << endl;
} else {
cout << "YES" << endl;
}
return 0;
}
这个程序首先定义了一个isValidDate函数,该函数接收一个日期字符串作为参数,并返回一个布尔值表示该日期是否合法。然后,在main函数中,程序读取用户输入的日期字符串,并使用isValidDate函数进行校验,最后根据校验结果输出相应的信息。
注意,这个程序使用了C++标准库中的stringstream来解析输入的日期字符串,并通过一系列的条件判断来校验日期的合法性。其中,对于闰年的判断是通过判断年份是否能被4整除但不能被100整除,或者能被400整除来实现的。此外,对于每个月份的天数,程序也进行了相应的检查。
这里空空如也
有帮助,赞一个