目录
代码
#include<iostream>
#include<sstream>
#include<string>
#include<iomanip>
using namespace std;
int main() {
string str_tm;
cin >> str_tm;
int hour, minute;
stringstream ss(str_tm);
char delimiter = ':';
ss >> hour >> delimiter >> minute;
if (hour >= 13 && hour < 24){
if(minute>0){
hour++;
}
for(int i=0;i<hour-12;i++){
cout<<"Dang";
}
cout<<endl;
}
else{
//printf("Only %02d:%02d. Too early to Dang.",hour,minute);
cout << "Only " << setfill('0') << setw(2) << hour << ":" << setw(2) << minute << ". Too early to Dang.";
}
return 0;
}
解释解释
std::stringstream
是C++标准库中的一个类,用于将字符串转换为其他类型的数据,或将其他类型的数据转换为字符串。它是基于流(stream)的概念实现的。在本例中,我们使用std::stringstream
将时间字符串转换为int
类型的小时数和分钟数。
std::stringstream
类的实例可以视为一个流,它支持输入和输出操作,可以像标准输入输出流(std::cin
和std::cout
)一样使用。在本例中,我们使用std::stringstream
的输入操作符>>
,从时间字符串中提取小时数和分钟数,保存到hour
和minute
变量中。具体来说,我们首先定义了一个
std::stringstream
对象ss
,并将时间字符串time_str
传给它的构造函数,将时间字符串和ss
绑定在一起。然后,我们使用>>
操作符,将ss
中的数据读取到hour
和minute
变量中。值得注意的是,
>>
操作符默认使用空格作为分隔符,可以通过指定其他分隔符,如冒号:
,来实现从时间字符串中提取小时数和分钟数。
测试点
看看我之前的代码有多冗余
#include<iostream>
#include<sstream>
#include<string>
#include<iomanip>
using namespace std;
int main(){
string str_tm;
cin>>str_tm;
int hour,minute;
stringstream ss(str_tm);
char delimiter=':';
ss>>hour>>delimiter>>minute;
if(ss.fail() || hour<0||hour>23||minute<0||minute>59){
cout<<"Input format error."<<endl;
return 0;
}
if(hour>=0&&hour<12){
cout<<setfill('0')<<setw(2)<<"Only "<<hour<<":"<<minute<<". Too early to Dang."<<endl;
}
if(hour==12){
if(minute==0){
cout<<setfill('0')<<setw(2)<<"Only "<<hour<<":"<<minute<<". Too early to Dang."<<endl;
return 0;
}
else if(minute>0){
cout<<"Dang"<<endl;
return 0;
}
}
if(minute==0){
for(int i=0;i<24-hour;i++){
cout<<"Dang";
}
cout<<endl;
}
else if(minute>0){
for(int i=0;i<24-hour;i++){
cout<<"Dang";
}
cout<<endl;
}
return 0;
}
我是先想了hour不可能的情况,然后是可能的情况。
好处是考虑的多,出复杂时可以更好应对,坏处也是考虑的多,耗费时间。
当然,测试点没有全过,难受。