首页 > 编程语言 >c++1095: 时间间隔(多实例测试) (字符串和字符以及数字的转换)

c++1095: 时间间隔(多实例测试) (字符串和字符以及数字的转换)

时间:2024-09-19 09:21:33浏览次数:11  
标签:1095 string second3 back c++ hour3 实例 push minute3

问题描述:

题目描述

从键盘输入两个时间点(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

相关文章

  • C++-练习-41
    题目:编写一个程序,它打开一个文本文件,逐个字符地读取该文件,知道到达文件末尾,然后指出该文件中包含多少个字符。(包含空格)源代码:#include<iostream>#include<fstream>intmain(){ usingnamespacestd; charch; intch_num=0; ifstreamfin; fin.open("people.......
  • C++-练习-42
    题目:编写一个程序,记录捐献给"维护合法权利团队"的资金。该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。这些信息被存在一个动态分配的结构数组中。每个结构有两个成员:用来存储姓名的字符数组和用力啊存储款项的double成员。读取所有的数据后,程序将......
  • C++之move函数的使用
    在C++中,std::move 是一个标准库函数,用于实现“移动语义”(MoveSemantics),这是C++11引入的一个重要特性。std::move 允许你将对象的资源“转移”到另一个对象,从而避免不必要的复制操作,提高效率。什么是 std::move?std::move 是一个类型转换函数,它将其参数转换为右值引......
  • C++学习笔记(28)
    十四、实现strchr()和strrchr()函数示例:#define_CRT_SECURE_NO_WARNINGS//使用C风格字符串操作的函数需要定义这个宏#include<iostream>usingnamespacestd;//返回在字符串s中第一次出现c的位置,如果找不到,返回0。//babcddefaeaconstchar*mystrchr(co......
  • C++学习笔记(一、预备知识)
    C++简介C++融合了三种不同的编程方式:-C语言代表的过程性语言-C++在C语言基础上添加的类代表的面向对象语言-C++模板支持的泛型编程。值得一提的是,不要把C语言与C++混为一谈,他们可以说是两个不同的语言。C++简史2.1C语言20世纪70年代,贝尔实验室的DennisRi......
  • C/C++语言基础--C++面向对象、类、对象概念讲解
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言今天更新的比较晚了,主要一直用是谷歌Colab训练模型,访问国内csdn反而不好使了,请大家见谅;C++是面向对象的语言,本文将介绍什么是面向对象、什么是类、什么是对象、类和对象的关系是什么?欢迎大家点赞+收藏+关注;C语......
  • C++基于select和epoll的TCP服务器
    select版本服务器#include<arpa/inet.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<string>#include<pthread.h>#include<sys/select.h>......
  • C++入门基础知识75(高级)——【关于C++ Web 编程】
    成长路上不孤单......
  • c++运算符
    #include<iostream>//运算符usingnamespacestd;intmain(){inta=9;intb=6;cout<<"这是加法:"<<a+b<<endl;cout<<"这是减法:"<<a-b<<endl;cout<<"这是乘法:"<<......
  • C/C++中哪些数据存放于栈区、堆区、静态区、常量区的详细说明
    文章目录1.栈区(Stack)2.堆区(Heap)3.静态区(Static)4.常量区(Read-OnlyorConstantSection)总结:栈(Stack)的生长:堆(Heap)的生长:测试一答案二答案1.栈区(Stack)栈区用于存放局部变量和函数调用信息,它的内存由编译器自动分配和释放,具有自动管理的特点。栈区的内存分配遵循先......