定义一个由小时、分钟、秒组成的一个class名为Time,来表示时间。Time的结构如下:
输入共两行:
第1行为3个int型,以空格分开,分别表示时、分、秒。
第2行为一个字符串,为非标准格式的24小时表述。
输出共两行,均是标准格式表达的24小时表述。
#include <iostream>
#include <string>
using namespace std;
class Time
{
public:
int _Hour = 0;
int _Minute = 0;
int _Second = 0;
public:
Time() {}
void setTime()
{
cin >> _Hour;
cin >> _Minute;
cin >> _Second;
}
void setTime(const std::string& str_time_)
{
string time;
int i;
_Hour = 0;
_Minute = 0;
_Second = 0;
for (i = 0; i < str_time_.size() - 1; i++)
{
if (str_time_[i] == ':' && i <= 2) //小时部分
{
if (i == 1)
{
_Hour = int(str_time_[0])-48;
}
if (i == 2)
{
_Hour = 10 * (int(str_time_[0])-48) + int(str_time_[1])-48;
}
}
if (str_time_[i] == ':' && i > 2) //分钟部分,至少为第三项以后
{
if (str_time_[i - 2] == ':') //识别出分钟部分后的冒号后,如果前两项就是冒号,那么个位值取前一位
{
_Minute = int(str_time_[i - 1])-48;
}
else
{
//如果前两项不是冒号,那么取前两位的十倍加上前一位的一倍作为分钟
_Minute = 10 * (int(str_time_[i - 2])-48) + int(str_time_[i - 1])-48;
}
}
if (str_time_[i] == ':' && i > 2) //秒部分
{
if ((i + 2) > str_time_.size() - 1)
{
_Second = int(str_time_[i + 1]) - 48;
}
else
{
_Second = 10 *(int( str_time_[i + 1])-48)+ int(str_time_[i + 2])-48;
}
if ((i + 2) > str_time_.size() - 1)
{
_Second = int(str_time_[i + 1])-48;
}
}
else
continue;
}
}
void print()
{
printf("%02d:", _Hour);
printf("%02d:", _Minute);
printf("%02d\n", _Second);
}
};
int main() {
Time t1;
t1.setTime();
Time t2;
std::string str_time;
std::cin >> str_time;
t2.setTime(str_time);
t1.print();
t2.print();
return 0;
}
比较基础,不多赘述,但是自己写的算法有点垃圾了