Problem J: 时间类的流插入、提取和递增、递减运算

xiaoxiao2021-02-27  501

HomeWeb BoardProblemSetStandingStatusStatistics

Problem J: 时间类的流插入、提取和递增、递减运算

Time Limit: 3 Sec   Memory Limit: 128 MB Submit: 3119   Solved: 2015 [ Submit][ Status][ Web Board]

Description

封装一个时间类Time,在类上重载以下运算符,使得main()函数能够正确运行。 流插入操作符“>>”,按照输入格式从标准输入读取三个整数:hh,mm,ss,分别表示时、分、秒,其值在int范围内。 流提取操作符“<<”;按照“hh:mm:ss”输出Time类的对象,不合法的时间输出“error!!!”。 前置自增运算符“++”:把时间对象的秒数加1并返回。 前置自减运算符“--”:把时间对象的秒数减1并返回。 后置自增运算符“++”:把时间对象的秒数加1,返回原值。 后置自减运算符“--”:把时间对象的秒数减1,返回原值。 以上4个自增、自减仅对合法的时间操作,并且不会产生不合法的时间。比如: 若原时间对象为“00:00:00”,自减运算后的对象为“23:59:59”; 若原时间对象为“23:59:59”,自增运算后的对象为“00:00:00”; 若原时间对象为“24:60:60”,自增或自减运算后对象仍为“24:60:60”。 函数调用格式见append.cc。 append.cc中已给出main()函数

Input

输入的第一个整数n,表示有n组测试数据,每组3个整数:hh,mm,ss,分别表示时、分、秒,其值都在int范围内。

Output

输出一张表:每列8个字符宽,两列之间有一个空格。 首先,输出一个表头:“++t      --t      t        t--      t++      t       ”, 其次,对应每组测试数据在一行内依次以下内容: 前置++、前置--、原值、后置--、后置++、原值。 若输入的日期合法,输出格式为“hh:mm:ss”,不足两位的输出需要前面补0。如果输入的时间不合法,则输出“error!!!”。格式见sample。

Sample Input

60 0 10 59 591 1 6023 0 023 59 5924 1 0

Sample Output

++t --t t t-- t++ t 00:00:02 00:00:01 00:00:01 00:00:01 00:00:00 00:00:0101:00:00 00:59:59 00:59:59 00:59:59 00:59:58 00:59:59error!!! error!!! error!!! error!!! error!!! error!!!23:00:01 23:00:00 23:00:00 23:00:00 22:59:59 23:00:0000:00:00 23:59:59 23:59:59 23:59:59 23:59:58 23:59:59error!!! error!!! error!!! error!!! error!!! error!!!

HINT

输出格式用头文件<iomanip>中流操作算子: setw(w)   :设置数据的输出宽度为w个字符 setfill(c):设置用字符c作为填充字符 left      :设置输出左对齐 right     :设置输出优对齐

Append Code

append.cc, [ Submit][ Status][ Web Board]

한국어<  中文 فارسی English ไทย All Copyright Reserved 2010-2011 SDUSTOJ TEAM GPL2.0 2003-2011 HUSTOJ Project TEAM Anything about the Problems, Please Contact Admin:admin

#include <iostream> #include <iomanip> #include <sstream> using namespace std; class Time { private: int h,m,s; public: Time():h(0),m(0),s(0){} Time(int hh,int mm,int ss) : h(hh),m(mm),s(ss){} Time(const Time &t) { h = t.h;m = t.m;s = t.s; } public: Time &inputTime() { int hour, minute, second; cin>>hour>>minute>>second; this->hour(hour);this->minute(minute);this->second(second); return *this; } public: void hour(int hh){ h = hh;} void minute(int mm){ m = mm;} void second(int ss ){ s = ss;} public: int hour()const{return h;} int minute()const{return m;} int second()const{return s;} public: void showTime() const { if(h >= 0&& h<24 && m >=0 && m < 60 && s >= 0 && s < 60){ cout << setw(2) << setfill('0'); cout << setw(2) << h << ":"; cout << setw(2) << m << ":"; cout << setw(2) << s; } else cout << "Time error"; } public: Time & operator++() { if(h >= 0&&h < 24&&m >= 0&&m < 60 && s >= 0 &&s < 60) { s++; while (s >= 60 ) { s -= 60; m++; } while (m >= 60 ) { m -= 60; h++; } while (h >= 24 ) { h -= 24; } } return *this; } const Time operator++(int) { Time t(*this); if(h >= 0&&h < 24&&m >= 0&&m < 60 && s >= 0 &&s < 60) { s++; while (s >= 60 ) { s -= 60; m++; } while (m >= 60 ) { m -= 60; h++; } while (h >= 24 ) { h -= 24; } } return t; } Time & operator--() { if(h >= 0&&h < 24&&m >= 0&&m < 60 && s >= 0 &&s < 60) { s --; while ( s < 0 ) { s += 60; m--; } while ( m < 0 ) { m += 60; h--; } while ( h < 0 ) { h += 24; } } return *this; } const Time operator--(int) { Time t(*this); if(h >= 0&&h < 24&&m >= 0&&m < 60 && s >= 0 &&s < 60) { s--; while ( s < 0 ) { s += 60; m--; } while ( m < 0 ) { m += 60; h--; } while ( h < 0 ) { h += 24; } } return t; } friend istream &operator>>(istream &is,Time &t) { is >> t.h >> t.m >> t.s; return is; } friend ostream &operator<<(ostream &os,const Time &t) { if(t.h >= 0&& t.h<24 && t.m >=0 && t.m < 60 && t.s >= 0 && t.s < 60){ cout << setw(2) << setfill('0'); cout << setw(2) << t.h << ":"; cout << setw(2) << t.m << ":"; cout << setw(2) << t.s; } else cout << "error!!!"; return os; } }; int main() { Time t; int cases; cin>>cases; cout<<setw(8)<<left<<"++t"<<" "; cout<<setw(8)<<left<<"--t"<<" "; cout<<setw(8)<<left<<"t"<<" "; cout<<setw(8)<<left<<"t--"<<" "; cout<<setw(8)<<left<<"t++"<<" "; cout<<setw(8)<<left<<"t"<<right<<endl; for(int i = 1; i <= cases; ++i) { cin>>t; cout<<(++t)<<" "; cout<<(--t)<<" "; cout<<t<<" "; cout<<t--<<" "; cout<<t++<<" "; cout<<t<<endl; } }
转载请注明原文地址: https://www.6miu.com/read-915.html

最新回复(0)