进阶版显示时间(附C++源码)

一:开发环境

先来看看我的开发环境,用的东西还是比较简单的:

作者:嘟粥yyds

时间:2022年12月7日

开发工具:Microsoft Visual Studio

所设计头文件:iostream、vector、string、sstream、iomanip

二:题目详情 

进阶版显示时间(附C++源码)_第1张图片

 三:题目分析

3.1 基本思路

创建vector容器按序存储n行数据并将该容器传给函数 string mfc_time(vector &v);依次对“秒”、“时”、“分”的数据进行处理(模60),而对于“日”和“月”的数据借助全局数组 int DAYS_OF_MOUTH[] = { 31,28,31,30,31,30, 31, 31, 30, 31, 30,31 }; 进行处理,并根据当前是否为闰年更新DAYS_OF_MOUTH中2月的天数。

3.2 具体实现

#include
#include
#include
#include
#include
using namespace std;
int DAYS_OF_MOUTH[] = { 31,28,31,30,31,30, 31, 31, 30, 31, 30,31 };
string MOUTHS[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" };
string mfc_time(vector &v) {
	v[5] += v[6];//v[5]:秒
	v[4] += v[5] / 60; v[5] %= 60;//v[4]->分
	v[3] += v[4] / 60; v[4] %= 60;//v[3]->时
	v[2] += v[3] / 24; v[3] %= 24;//v[2]->日
	//v[1]->月  v[0]->年
	if ((v[0] % 4 == 0 && v[0] % 100 != 0) || (v[0] % 400 == 0)) 
		DAYS_OF_MOUTH[1] = 29;//如果是闰年则将二月的天数修改为29天
	//若天数与月份不匹配则更新天数、月份和年份
	while (DAYS_OF_MOUTH[(v[1] - 1) % 12] < v[2]) {
		v[2] -= DAYS_OF_MOUTH[(v[1] - 1) % 12];
		if (v[1] >= 12) {
			v[1] = 1;
			v[0]++;
			if ((v[0] % 4 == 0 && v[0] % 100 != 0) || (v[0] % 400 == 0))
				DAYS_OF_MOUTH[1] = 29;
			else
				DAYS_OF_MOUTH[1] = 28;
			continue;
		}
		v[1]++;
	}
	string back_str = "";
	back_str += (MOUTHS[v[1] - 1] + " " + to_string(v[2]));
	if (v[2] == 1 || v[2] == 21 || v[2] == 31)
		back_str += "st ";
	else if (v[2] == 2 || v[2] == 22)
		back_str += "nd ";
	else if (v[2] == 3 || v[2] == 23)
		back_str += "rd ";
	else
		back_str += "th ";
	stringstream ss1, ss2, ss3;
	ss1 << setw(2) << setfill('0') << v[3];//时
	ss2 << setw(2) << setfill('0') << v[4];//分
	ss3 << setw(2) << setfill('0') << v[5];//秒
	back_str += (ss1.str() + ":" + ss2.str() + ":" + ss3.str() + " " + to_string(v[0]));
	return back_str;
}
int main() {
	int n;
	cin >> n;
	vector backtime;
	vector time(7, 0);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < 7; j++) {
			cin >> time[j];
		}
		backtime.push_back(mfc_time(time));
	}
	for (string str : backtime)
		cout << str << endl;
	system("pause");
	return 0;
}

3.3  运行结果

进阶版显示时间(附C++源码)_第2张图片

 四 :补充

利用ss << setw(2) << setfill('0') << v[3];ss.str();把数据写入字符串流里(不满两位的以0填充)再读取输出。

对“天”和“月”数据进行处理时,需要根据每月天数不同和每年的二月天数可能不同进行分类处理。借助全局数组 int DAY_OF_MOUTH[] = { 31,28,31,30,31,30, 31, 31, 30, 31, 30,31 }; 进行处理。利用全局数组中存储的数据不断更新天数和月份并检查年份是否需要更新。

你可能感兴趣的:(c++,开发语言,算法)