网易互娱笔试:电子时钟

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 20:02   24   0

输入描述:

每个输入数据包含多个测试点。每个测试点后有一个空行。 第一行为测试点的个数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;

 }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP