Problem J: 时间类的流插入、提取和递增、递减运算
来源:互联网 发布:游戏辅助编程 编辑:程序博客网 时间:2024/06/05 03:44
HomeWeb BoardProblemSetStandingStatusStatistics
Submit: 3119 Solved: 2015
[Submit][Status][Web Board]
[Submit][Status][Web Board]
Problem J: 时间类的流插入、提取和递增、递减运算
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 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,
한국어< 中文 فارسی English ไทย
All Copyright Reserved 2010-2011 SDUSTOJ TEAM
GPL2.0 2003-2011HUSTOJ 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; }}
0 0
- Problem J: 时间类的流插入、提取和递增、递减运算
- Problem G: 时间类的流插入、提取和递增、递减运算
- 递增和递减运算符
- 递增和递减运算符
- C++ 递增/递减运算符和指针
- 运算符——递增++和递减--
- php递增、递减运算的理解
- (22)赋值运算符、递增和递减运算符
- for循环递增和递减的区别
- PHP -- 字符串的递增和递减
- 一个面试题,关于运算优先级和递增递减
- 第四章 4.5 递增和递减运算符
- 【C++学习笔记】递增/递减运算符和指针
- 后置递增和递减
- 后置递增和递减
- 递增、递减运算符位于变量前后的区别
- 运算符重载-流插入运算符和流提取运算符的重载
- 递增运算符&&递减运算符
- Problem I: 时间类的加、减法赋值运算
- 因特网协议栈中的层
- 又见jsp
- 【516】 Longest Palindromic Subsequence
- 优先队列基础
- Problem J: 时间类的流插入、提取和递增、递减运算
- bootstrap的tab选项卡
- kubelet 最佳配置
- Android一个应用多个图标的几种实现方式
- codeforces 300C 乘法逆元 (乘法逆元模为素数的模板)
- 了解 java 虚拟机基础知识
- uboot的Makefile
- 字符串字典树判重Linux内核代码风格
- Ubuntu16.04 QT "QMYSQL driver not loaded on Ubuntu"问题