c++ - 时间格式 hh :mm:ss input

标签 c++ cin

我遇到的情况是,我输入了两种时间格式 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/

相关文章:

c++ - 如何将两种不同的协议(protocol)包装到一个 api 中?

c++ - 通过 std::cin 在一行中读取 500 个输入会产生垃圾

c++ - 如何定义 qmake 的库搜索目录?

c++ - 在哪里放置以及如何在 C++ 项目中包含 dll 文件?

c++ - 无字母循环

c++ - 在 C++ 中使用两个 getline(cin,s)

c++ - 使用 cin.clear() 之间的区别;

c++ - 当我调用我的函数时,while 循环会跳过一个步骤

c++ - 为什么在我的程序中调用了两次构造函数?

C++ 从 DLL 实例化模板类