先来看看我的开发环境,用的东西还是比较简单的:
作者:嘟粥yyds
时间:2022年12月7日
开发工具:Microsoft Visual Studio
所设计头文件:iostream、vector、string、sstream、iomanip
创建vector容器按序存储n行数据并将该容器传给函数 string mfc_time(vector
#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;
}
利用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 }; 进行处理。利用全局数组中存储的数据不断更新天数和月份并检查年份是否需要更新。