我试图输入一个复数并使用重载运算符来处理解析实部和虚部。如果我输入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;
}
答案 0 :(得分:1)
您的代码在我的编译器上工作得很好!也许问题出在其他地方(例如在输出中)?
请注意,从输入流中提取数字时,std::setw
无效。
请记住,您可能还需要考虑以下形式的案例:A - Bi
,如果用户决定在运算符或i
周围插入额外或删除空格,则可能会这样。但对于简单的案例A + Bi
,您的原型不应成为问题。