時間クラス
Descriptionのフローの挿入、抽出、インクリメントおよびデクリメント操作は、
時間クラスTimeをカプセル化し、クラスの次の演算子をオーバーロードして、main()関数を正しく実行します。
ストリーム挿入演算子「>>」は、入力形式に従って標準入力から3つの整数(それぞれ時間、分、秒を表す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を参照してください。
main()関数
Input
によって入力された最初の整数nはappend.ccで指定されており、テストデータのグループがn個あり、それぞれにhh、mm、ssの3つの整数があり、時間、分、それぞれと2番目、およびそれらの値はintの範囲内です。
出力は
、テーブルを出力します。各列は8つの文字幅で、2列の間にスペースがあります。
まず、ヘッダーを出力します: "++ t --tt t-- t ++ t"、
次に、次の順序で行のテストデータの各グループに対応します:
pre ++、pre-、元の値、post- 、Post ++、元の値。
入力日付が有効な場合、出力形式は「hh:mm:ss」であり、2桁未満の出力には接頭辞0を付ける必要があります。入力時間が不正な場合、「エラー!!!」が出力されます。フォーマットについてはサンプルを参照してください。
サンプル入力
6
0 0 1
0 59 59
1 1 60
23 0 0
23 59 59
24 1 0
サンプル出力
++t --t t t-- t++ t
00:00:02 00:00:01 00:00:01 00:00:01 00:00:00 00:00:01
01:00:00 00:59:59 00:59:59 00:59:59 00:59:58 00:59:59
error!!! error!!! error!!! error!!! error!!! error!!!
23:00:01 23:00:00 23:00:00 23:00:00 22:59:59 23:00:00
00:00:00 23:59:59 23:59:59 23:59:59 23:59:58 23:59:59
error!!! error!!! error!!! error!!! error!!! error!!!
タイトル指定コード
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;
}
}
コード:
#include<iostream>
#include<iomanip>
using namespace std;
class Time{
int hh,mm,ss;
public:
Time(){
hh=0;
mm=0;
ss=0;
}
Time(int h,int m,int s){
hh=h;
mm=m;
ss=s;
}
friend istream& operator >>(istream &is,Time &T){
is>>T.hh;
is>>T.mm;
is>>T.ss;
}
friend ostream& operator <<(ostream &os,const Time &T){
if(!((T.hh>=0&&T.hh<=23)&&(T.mm>=0&&T.mm<=59)&&(T.ss>=0&&T.ss<=59))){
os<<"error!!!";
}else{
if(T.hh/10){
os<<T.hh<<':';
}else{
os<<0<<T.hh<<':';
}
if(T.mm/10){
os<<T.mm<<':';
}else{
os<<0<<T.mm<<':';
}
if(T.ss/10){
os<<T.ss;
}else{
os<<0<<T.ss;
}
}
}
Time& operator ++(){
if(hh==23&&mm==59&&ss==59){
hh=0;
mm=0;
ss=0;
return *this;
}else if(!((hh>=0&&hh<=23)&&(mm>=0&&mm<=59)&&(ss>=0&&ss<=59))){
return *this;
}else{
ss++;
if(ss==60){
ss=0;
mm++;
if(mm==60){
mm=0;
hh++;
if(hh==24){
hh=0;
}
}
}
return *this;
}
}
Time& operator --(){
if(hh==0&&mm==0&&ss==0){
hh=23;
mm=59;
ss=59;
return *this;
}else if(!((hh>=0&&hh<=23)&&(mm>=0&&mm<=59)&&(ss>=0&&ss<=59))){
return *this;
}else{
ss--;
if(ss==-1){
ss=59;
mm--;
if(mm==-1){
mm=59;
hh--;
if(hh==-1){
hh=23;
}
}
}
return *this;
}
}
Time operator ++(int){
int h=hh;
int m=mm;
int s=ss;
if(hh==23&&mm==59&&ss==59){
hh=0;
mm=0;
ss=0;
}else if(!((hh>=0&&hh<=23)&&(mm>=0&&mm<=59)&&(ss>=0&&ss<=59))){
}else{
ss++;
if(ss==60){
ss=0;
mm++;
if(mm==60){
mm=0;
hh++;
if(hh==24){
hh=0;
}
}
}
}
return Time(h,m,s);
}
Time operator --(int){
int h=hh;
int m=mm;
int s=ss;
if(hh==0&&mm==0&&ss==0){
hh=23;
mm=59;
ss=59;
}else if(!((hh>=0&&hh<=23)&&(mm>=0&&mm<=59)&&(ss>=0&&ss<=59))){
}else{
ss--;
if(ss==-1){
ss=59;
mm--;
if(mm==-1){
mm=59;
hh--;
if(hh==-1){
hh=23;
}
}
}
}
return Time(h,m,s);
}
};
//setW函数在<iomanip>头文件里面
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;
}
}