7-7 12-24小时制

编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

输入格式:

输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。

提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。

输出格式:

在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。

输入样例:
21:11
输出样例:
9:11 PM
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

解题思路

创建一个函数用于分割字符串的,然后使用容器存储,判断小时如果大于12那么减去12并打印PM,等于12点的时候直接打印并加上PM,其余的情况不改变小时数,加上AM

代码实现

#include <iostream>
#include <sstream>
#include<vector>
#include<string>
using namespace std;

vector<string> Stringsplit(string str, const char split)
{
	vector<string> items;
	istringstream iss(str);	// 输入流
	string token;			// 接收缓冲区
	while (getline(iss, token, split))	// 以split为分隔符
	{
		items.push_back(token);
	}
	return items;
}
void hello(int* arr, int length) {
	return;
}
int main()
{
	int left, right;
	string msg;
	cin >> msg;
	vector<string> items = Stringsplit(msg, ':');

	std::istringstream ss(items[0]);
	std::istringstream ss1(items[1]);
	ss >> left;
	ss1 >> right;
	if (left > 12) {
		left -= 12;
		items.push_back("PM");
	}
	else if (left == 12)
		items.push_back("PM");
	else
		items.push_back("AM");

	cout << left;
	cout << ":";
	cout << right << " ";
	cout << items[2] << endl;

	return 0;
}
posted @ 2022-11-20 00:48  蠢蛋快跑  阅读(156)  评论(0)    收藏  举报