我遇到的情况是,我输入了两种时间格式 hh:mm:ss。
我知道 int
变量从 cin
中提取,直到达到非整数。这意味着我可以轻松提取小时,但字符“:”仍然会在流中,这会导致提取分钟的问题。
我知道我可以使用cin.ignore()
,但由于我必须输入两种时间格式,仅用于输入的代码会导致很长并且看起来不太好。
只是给你一个想法:
int h,m,s, h2,m2,s2;
cin>>h;
cin.ignore();
cin>>m;
cin.ignore();
cin>>s;
cin>>h2;
cin.ignore();
cin>>m2;
cin.ignore();
cin>>s2;
我知道 cin 自动忽略空格。有没有办法让它自动忽略特定字符(在本例中为字符“:”)?
最佳答案
一个简单的方法是创建一个 colon()
操纵器:
std::istream& colon(std::istream& in) {
if ((in >> std::ws).peek() == ':') {
in.ignore();
}
else {
in.setstate(std::ios_base::failbit));
}
return in;
}
然后您可以提取 ':'
字符:
in >> h >> colon >> m >> colon >> s;
显然,我会多次创建一个输入运算符,这样我就可以使用读取这两个对象
in >> time1 >> time2;
关于c++ - 时间格式 hh :mm:ss input,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036186/