在重载输入流时使用peek()

时间:2011-10-04 03:52:39

标签: c++

我正在进行重载>>对于分数类,需要处理几种不同类型的输入。示例:1/2(常规分数),2 + 3/4(混合数),2(整数)。教授在下面提供了一个提示,说我们需要使用peek()函数来弄清楚整数之后的第二个字符是什么。那么这意味着temp需要被声明为int吗?我的问题是,如果temp是一个int,你怎么得到分数的其余部分(当它不是整数时)?

根据我的经验,我会将temp声明为字符串,而不是使用peek。但是,自从教授建议以来,int和peek方法必须有一些优点。

in >> temp;
if (in.peek() == '+'){
    doSomething...
} else if (in.peek() == '/'){
    doSomethingElse...
} else {
    doThirdOption
}

1 个答案:

答案 0 :(得分:0)

在这里,当你使用in>>temp时,它将获得所有数字,直到遇到一些非数字字符。目前,使用peek(),您可以检查下一个字符是'+'还是'/'
在任何一种情况下,您都必须从输入中读取另一个数字流并重复此过程。
一旦用户点击进入,您就拥有了所有号码,并且可以执行所需的操作。

另外,如果你必须计算分数的值,你可能最好使用float或double数据类型而不是int。