计算该日为本年中的第几天 C++实现

计算该日为本年中的第几天

需要C++11的支持

源代码

#include <stdexcept>
#include <iostream>
#include <string>
#include <vector>
#include <regex>

using namespace std;

struct Date {
	int year;
	int month;
	int day;
};

bool Leep_Year(const int &date) {
	if (date % 400 == 0 || date % 4 == 0 && date % 100 != 0) {
		return true;
	}
	else {
		return false;
	}
}

void Cal_Day() {
	Date date;
	smatch m;
	string date_str;
	regex reg("([[:d:]]{4})([-./])?([01]?[[:d:]])([-./])?([0123]?[[:d:]])");
	auto sum = 0;
	vector<int> temp = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	cout << "请输入年月日(输入格式示例:2016-10-15或2016.10.15或2016/10/15):" << endl;
	while (cin >> date_str) {
		try {
			if (regex_match(date_str, m, reg) && stoi(m.str(3)) <= 12 && stoi(m.str(5)) <= 31) {
				if ((Leep_Year(stoi(m.str(1))) && stoi(m.str(3)) == 2 && stoi(m.str(5)) > 29) ||
					(!Leep_Year(stoi(m.str(1))) && stoi(m.str(3)) == 2 && stoi(m.str(5)) > 28)) {
					throw runtime_error("格式或日期错误,请重输!");
				}
				date.year = stoi(m.str(1));
				date.month = stoi(m.str(3));
				date.day = stoi(m.str(5));

				for (auto i = 0; i != date.month - 1; ++i) {
					sum += temp[i];
				}
				if (date.month > 2) {
					sum += (date.day + Leep_Year(date.year));
				}
				else {
					sum += date.day;
				}

				cout << "该日是该年第 " << sum << "天" << endl;
			}
			else {
				throw runtime_error("格式或日期错误,请重输!");
			}
		}
		catch (runtime_error err) {
			cerr << err.what() << endl;
		}

		sum = 0;
	}
}

int main() {
	Cal_Day();

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值