问题描述:
题目描述
从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。要求程序定义如下两个函数,并在main()中调用这两个函数实现相应的功能
/*三个形参分别为为用于表示一个时间点的时、分、秒,函数返回对应的秒。*/
int HmsToS(int h, int m, int s);
/* 形参s表示一个时间段的长度,单位是秒,该函数将该时间段转换为对应的“小时:分钟:秒” 格式输出 */
void PrintTime(int s);
输入
输入数据有多组。每组输入包括两行。第一行为时间点1,第二行为时间点2,时间点均以“HH:MM:SS”的格式输入。测试数据保证时间点1早于时间点2。
输出
对应每组数据,有一行输出,以“HH:MM:SS”的格式输出时间间隔。注意不足两位要补占位符0。格式参看输入输出。
代码实现:
#include <iostream>
using namespace std;
#include<string>
string division(string string1,string string2)//时间上做减法
{
int hour1,hour2,minute1,minute2,second1,second2;
int length=8;
for(int i=0;i<length;i++)
{
hour1=(string1[0]-'0')*10+(string1[1]-'0');//12:01:12
minute1=(string1[3]-'0')*10+(string1[4]-'0');
second1=(string1[6]-'0')*10+(string1[7]-'0');
hour2=(string2[0]-'0')*10+(string2[1]-'0');
minute2=(string2[3]-'0')*10+(string2[4]-'0');
second2=(string2[6]-'0')*10+(string2[7]-'0');
}
int time1,time2;//全部转化为秒
time1=second1+minute1*60+hour1*60*60;
time2=second2+minute2*60+hour2*60*60;
int low_time=time2-time1;
//作差之后的结果
int hour3=low_time/3600;
int minute3=(low_time-hour3*3600)/60;
int second3=low_time%60;
/*
cout<<hour3<<endl;
cout<<minute3<<endl;
cout<<second3<<endl;
*/
//将作差之后的结果转化为字符串
string string_hour3,string_minute3,string_second3;
if(hour3<10&&hour3>=0)
{
if(hour3!=0)//代表第一个数是0.第二个数不是0
{
string_hour3.push_back('0');
char temp='0'+hour3;
string_hour3.push_back(temp);
}
else//两个数都是0
{
string_hour3.push_back('0');
string_hour3.push_back('0');
}
}
else
{
string_hour3=to_string(hour3);
}
if(minute3<10&&minute3>=0)
{
if(minute3!=0)
{
string_minute3.push_back('0');
char temp='0'+minute3;
string_minute3.push_back(temp);
}
else
{
string_minute3.push_back('0');
string_minute3.push_back('0');
}
}
else
{
string_minute3=to_string(minute3);
}
if(second3<10&&second3>=0)
{
if(second3!=0)
{
string_second3.push_back('0');
char temp='0'+second3;
string_second3.push_back(temp);
}
else
{
string_second3.push_back('0');
string_second3.push_back('0');
}
}
else
{
string_second3=to_string(second3);
}
/*
cout<<string_hour3<<endl;
cout<<string_minute3<<endl;
cout<<string_second3<<endl;
*/
string result=string_hour3+":"+string_minute3+":"+string_second3;
return result;
}
string computer() {
string a, b;
if (!(cin >> a >> b)) { // 检查输入流状态
return "-1"; // 返回一个特殊值
}
string result=division(a,b);
return result;
}
int main() {
bool flag = true;
while (flag) {
string result = computer();
if (result == "-1") { // 如果返回特殊值,表示输入流出现了错误,例如我们输入的ctrl+c
flag = false; // 结束循环
} else {
cout << result << endl;
}
}
return 0;
}
效果展示:
输入ctrl+z退出循环:
代码解析:
(1)外层无限循环
while (flag) {
string result = computer();
if (result == "-1") { // 如果返回特殊值,表示输入流出现了错误,例如我们输入的ctrl+c
flag = false; // 结束循环
} else {
cout << result << endl;
}
}
(2)输入两个数据,并看有没有输入ctrl+z
string computer() {
string a, b;
if (!(cin >> a >> b)) { // 检查输入流状态
return "-1"; // 返回一个特殊值
}
string result=division(a,b);
return result;
}
(3)提取输入的时间字符串中的“小时”“分钟”和“秒”
核心思想就是将字符串提出字符,将字符转换为数字:
int hour1,hour2,minute1,minute2,second1,second2;
int length=8;
for(int i=0;i<length;i++)
{
hour1=(string1[0]-'0')*10+(string1[1]-'0');//12:01:12
minute1=(string1[3]-'0')*10+(string1[4]-'0');
second1=(string1[6]-'0')*10+(string1[7]-'0');
hour2=(string2[0]-'0')*10+(string2[1]-'0');
minute2=(string2[3]-'0')*10+(string2[4]-'0');
second2=(string2[6]-'0')*10+(string2[7]-'0');
}
(4)将字符串1,字符串2的时间全部转化为秒
int time1,time2;//全部转化为秒
time1=second1+minute1*60+hour1*60*60;
time2=second2+minute2*60+hour2*60*60;
(5)作差,并求出对应的“小时”,“分钟”,“秒钟”的数字
int low_time=time2-time1;
//作差之后的结果
int hour3=low_time/3600;
int minute3=(low_time-hour3*3600)/60;
int second3=low_time%60;
(6)将结果数字转化为字符串
//将作差之后的结果转化为字符串
string string_hour3,string_minute3,string_second3;
if(hour3<10&&hour3>=0)
{
if(hour3!=0)//代表第一个数是0.第二个数不是0
{
string_hour3.push_back('0');
char temp='0'+hour3;
string_hour3.push_back(temp);
}
else//两个数都是0
{
string_hour3.push_back('0');
string_hour3.push_back('0');
}
}
else
{
string_hour3=to_string(hour3);
}
if(minute3<10&&minute3>=0)
{
if(minute3!=0)
{
string_minute3.push_back('0');
char temp='0'+minute3;
string_minute3.push_back(temp);
}
else
{
string_minute3.push_back('0');
string_minute3.push_back('0');
}
}
else
{
string_minute3=to_string(minute3);
}
if(second3<10&&second3>=0)
{
if(second3!=0)
{
string_second3.push_back('0');
char temp='0'+second3;
string_second3.push_back(temp);
}
else
{
string_second3.push_back('0');
string_second3.push_back('0');
}
}
else
{
string_second3=to_string(second3);
}
/*
cout<<string_hour3<<endl;
cout<<string_minute3<<endl;
cout<<string_second3<<endl;
*/
string result=string_hour3+":"+string_minute3+":"+string_second3;
return result;
好啦,希望能够帮助到大家!
标签:1095,string,second3,back,c++,hour3,实例,push,minute3 From: https://blog.csdn.net/weixin_74009895/article/details/142298825