以yyyymmdd格式表示一个日期,返回 boolbool 类型的值,功能是判断日期yyyymmdd是不是合法日期。 如果是合法日期则返回 true,否则返回 false 程序输入一个正整数,若是合法日期输出"YES";若不是合法日期则输出"NO"。
时间: 2024-12-20 12:24:35 浏览: 3
要判断一个以 "yyyy-mm-dd" 格式的字符串是否为合法日期,我们可以使用 C++ 的 `std::string` 和 `std::stringstream` 来解析并检查日期的组成。以下是一个简单的示例代码:
```cpp
#include <iostream>
#include <sstream>
#include <iomanip>
bool isValidDate(std::string date) {
std::istringstream ss(date);
int year, month, day;
if (!(ss >> std::get宽跳过白空间>> year >> '-' >> std::get宽跳过白 spaces>> month >> '-' >> std::get宽跳过白 spaces>> day)) { // 分割并忽略非数字字符
return false; // 输入无法转换成有效的数字,日期无效
}
if (year < 1 || year > 9999 || month < 1 || month > 12 || day < 1 || day > 31) { // 检查日期范围
return false;
}
// 更细致的日期验证(考虑闰年)
switch (month) {
case 2:
if (day > 29 && (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0))) {
return false;
}
break;
case 4, 6, 9, 11:
if (day > 30) {
return false;
}
break;
default:
if (day > 31) {
return false;
}
}
return true; // 合法日期
}
int main() {
std::string input_date;
std::cout << "Enter a date in yyyy-mm-dd format: ";
std::cin >> input_date;
if (isValidDate(input_date)) {
std::cout << "YES";
} else {
std::cout << "NO";
}
}
```
在这个代码中,我们首先尝试用 `std::istringstream` 解析输入的字符串,如果不能成功,则说明日期格式错误或包含非数字字符,返回 `false`。然后,我们检查年、月和日的范围,并根据月份处理闰年的特殊情况。如果所有条件都满足,我们就认为输入的是一个合法的日期。
阅读全文