重载流提取运算符
Posted
技术标签:
【中文标题】重载流提取运算符【英文标题】:overloaded stream extraction operator 【发布时间】:2013-02-09 16:41:46 【问题描述】:我试图输入一个复数并使用重载运算符来处理实部和虚部的解析。如果我输入像1 + 2i
这样的数字,我想要real = 1
和imaginary = 2
。
现在如果我输入1 + 2i
输入,输出是1 + 0i
。我怎样才能正确地做到这一点(号码有私人数据成员real
和imaginary
和operator>>
是一个朋友功能)
//input the form of 1 + 2i
istream & operator>>(istream &in, Number &value)
in >> std::setw(1) >> value.real;
in.ignore(3); //skip 'space' and '+' and 'space'
in >> std::setw(1) >> value.imaginary;
in.ignore(); //skip 'i'
return in;
//output in the for 1 + 2i
ostream &
operator<<(ostream &out, const Complex &value)
out << value.real << " + " << value.imaginary << "i" <<std::endl;
return out;
【问题讨论】:
你试过使用调试器吗? 顺便说一句,this one 为我工作 该代码有什么错误? 【参考方案1】:您的代码在我的编译器上运行良好!也许问题出在其他地方(例如在输出中)?
请注意std::setw
在从输入流中提取数字时无效。
请记住,您可能还需要考虑以下形式的情况:A - Bi
,并且可能如果用户决定在运算符或i
周围插入额外的或删除空格。但是对于简单的情况A + Bi
,您的原型应该不是问题。
【讨论】:
"std::setw 是一个修改输出的函数,因此对您的代码没有任何影响。" 这不是真的。 Example 还是错了。它限制了您可以提取的字符数。 您能否展示一个测试用例,因为我在任何编译器中都没有看到这种行为? 我应该更具体一点:它当然适用于字符串,而不是整数 :) 请参阅我的第一条评论中的链接,将stdin
数据与输出进行比较。
嗯,是的,这就是我更新声明以反映这一点的原因。 “std::setw
提取数字时没有效果”还是错了吗?以上是关于重载流提取运算符的主要内容,如果未能解决你的问题,请参考以下文章