网易互娱笔试:电子时钟

输入描述:

每个输入数据包含多个测试点。每个测试点后有一个空行。 第一行为测试点的个数T(T<=100)。 每个测试点包含1行,为一个字符串”HH:MM:SS”,表示钟表显示的时间。

输出描述:

对于每个测试点,输出一行。如果钟表显示的时间为真实存在的时间,则不做改动输出该时间,否则输出一个新的”HH:MM:SS”,表示修改最少的数字情况下,字典序最小的真实存在的时间。

输入例子1:

2
19:90:23
23:59:59

输出例子1:

19:00:23
23:59:59

自己出错的原因:

1、当时没有看懂  输出描述里面要求的 每一个测试点都要有一个输出;这样才是正确的  我一开始写成了一个字符串数组;最后一起输出的;所有在这里面出错了 ;总结出自己的弱点 因为长期刷leetcode 对输入输出的描述这一方面比较缺乏;所以还是待于加强;

思路:

  1. 写一个函数判断输入的字符串是否为一个合格的时间;如果不合格的话 转化为合格的至于怎么转化,需要直接把时、分、秒的第一位直接赋值为‘0’就是了;
  2. 其中需要比较字符串 所以需要写一个字符串的比较函数 
  3. 另外需要写一个字符转化为字符串的函数 这个是自己不会的;需要把字符转化为一个字符串数组表示出来 然后在直接赋值给一个string类对象

CODE:

//第一题:	
#include<iostream>
#include <vector>
#include <assert.h>
#include<ctime>
#include<cmath>
#include<string>
using namespace std;
string charToString(char c)
{
	string s;
	char s1[2] = { c, 0 };
	s = s1;
	//cout << "字符转化为字符串是:";
	//cout << s << endl;
	return s;
}
bool cmp(string &s1, string s2)
{
	return stoi(s1) > stoi(s2);
}
string printstring(string &s)
{
	int len = s.size();
	//assert(len>=9);
	string s1 = s.substr(0, 2);
	string s2 = s.substr(3, 2);
	string s3 = s.substr(6, 2);
	s1 = cmp(s1,"23") ? ("0" + charToString(s1[1])) : s1;
	//cout << "此时的是:"<<s1<<endl;
	s2 = cmp(s2, "59") ? ("0" + charToString(s2[1])) : s2;
	//cout << "此时的是:" << s2 << endl;
	s3 = cmp(s3, "59") ? ("0" + charToString(s3[1])) : s3;
	//cout << "此时的是:" << s3 << endl;
	string res = s1 + ":" + s2 + ":" + s3;
	return res;
}
//=========main函数
int main()
{
	int  T;
	cin >> T;
	assert(T <= 100);
	while (T--)
	{
		string s;
		cin >> s;
		string res = printstring(s);
		cout << res << endl;

	}
}

猜你喜欢

转载自blog.csdn.net/langxue4516/article/details/81488903