【发布时间】:2016-05-28 12:51:56
【问题描述】:
我正在学习 C++,并且正在做一个项目来处理一个表示有理数(例如 ½)的类。我重载了 istream >> 运算符,以便它正确地从流中读取有理数。
我在将整数输入流中以获得有理数时遇到问题。例如,如果有人键入 2,我希望它从流中读取为 2/1。有人告诉我使用 peek() 函数会起作用,但我不知道如何。代码如下:
std::istream& operator>>(std::istream& is, Rational& r)
{
int p, q;
char c;
is >> p >> c >> q;
if (!is)
return is;
// Require that the divider to be a '/'.
if (c != '/') {
is.setstate(std::ios::failbit);
return is;
}
// Make sure that we didn't read p/0.
if (q == 0) {
is.setstate(std::ios::failbit);
return is;
}
r = Rational(p, q);
return is;
}
除非输入整数,否则它可以完美运行;我希望它被读作(int)/1。
有什么建议吗?
【问题讨论】:
-
我不完全理解你。你希望
2和2/1一样好,但不是2/somethinginvalid? -
如果您考虑一下,您正在执行 3 次读取...所以如果您希望某人能够输入 1 项(例如“2”)或 3 项(例如“2 " "/" "3") 你真正需要做的是一次读取整行,然后解析它。
-
学习Boost.Spirit的好练习boost.org/doc/libs/1_63_0/libs/spirit/doc/html/spirit/qi/…
标签: c++ overloading operator-keyword istream peek