0

我试图输入一个复数并使用重载运算符来处理实部和虚部的解析。如果我输入一个数字1 + 2i,我想要real = 1imaginary = 2

现在如果我输入1 + 2i回车,输出是1 + 0i. 我怎样才能正确地做到这一点(号码有私人数据成员realimaginary并且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;
}
4

1 回答 1

1

您的代码在我的编译器上运行良好!也许问题出在其他地方(例如在输出中)?

请注意,std::setw从输入流中提取数字时没有效果。

请记住,您可能还需要考虑以下形式的情况:A - Bi并且可能如果用户决定在运算符或i. 但是对于简单的情况,A + Bi您的原型应该不是问题。

于 2013-02-09T16:52:48.123 回答