用c++语言编写程序:按照 **** ** **(年 月 日,比如2023 4 25)格式输入一个具体的年月日期,通过程序计算: 该日期是这一年度的第几天。 如果输入格式非法或日期本身无效,则输出“输入日期有误!”的提示。
时间: 2024-06-25 15:00:32 浏览: 6
在C++中,你可以使用`std::cin`从用户输入获取日期,然后通过计算来确定该日期是一年中的第几天。这里是一个简单的实现方法:
```cpp
#include <iostream>
#include <sstream>
#include <string>
#include <stdexcept>
// 将字符串转换为日期并检查有效性
int parseDate(const std::string& dateStr) {
std::istringstream iss(dateStr);
int day, month, year;
if (!(iss >> day >> month >> year)) {
throw std::invalid_argument("Invalid date format");
}
// 验证月份和日期范围
if (month < 1 || month > 12) {
throw std::invalid_argument("Invalid month");
}
if (day < 1 || (day > 31 && (month != 2 || !is_leap_year(year)))) {
throw std::invalid_argument("Invalid day for the given month");
}
// 如果是闰年,2月有29天
bool is_leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
int days_in_month[] = {31, (is_leap ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
return day + std::accumulate(days_in_month, days_in_month + month, 0);
}
int main() {
std::string input_date;
std::cout << "Please enter a date in the format YYYY-MM-DD: ";
std::getline(std::cin, input_date);
try {
int day_of_year = parseDate(input_date);
std::cout << "The date " << input_date << " is the " << day_of_year << "th day of the year.\n";
} catch (const std::invalid_argument& e) {
std::cerr << "Input date has an error: " << e.what() << '\n';
}
return 0;
}
```
在这个代码中,我们定义了一个辅助函数`parseDate`来解析输入的日期字符串,并检查其有效性。然后在`main`函数中,我们从用户获取输入并调用`parseDate`。如果输入有效,我们得到一年中的天数;如果输入无效,我们会捕获异常并显示错误信息。
注意,这个代码没有处理所有可能的闰年规则(例如世纪闰年),但通常来说,这样的简化版本在大多数日常应用中已经足够了。如果你需要更精确的闰年规则,可以在`parseDate`函数中添加适当的检查。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)