C ++:在cin Overload中拼接字符串

时间:2018-04-09 23:30:02

标签: c++ c-strings complex-numbers

我正在尝试拼接cin>> string;,这应该是一个复数。

我在Complex类中工作,它处理复数。

我很难将字符串拼接成单独的组件,因此我可以安排每个子字符串并将它们转换为对应于虚构或实部的相关双精度。

当我运行代码时,我发现如何找到字符串时出现错误,它似乎超出了界限。

这是我的函数的标题和定义,重载>>

标题

friend istream& operator >>(istream& inputStream,  Complex& amt);

定义:

istream& operator >>(istream& inputStream, Complex& amt){

    cout<<"Please enter your complex number: ";
    std::string str;
    inputStream >> str;
    //need different parts of string. imaginary, real, operand, 'i', and beginning sign.


    std::size_t pos = str.rfind('-'|'+');

    std::string str2 = str.substr(pos);     // str2 = imaginarypart

    if(str2.back()=='i'){
        str2.erase( str2.end()-1 );
    }

    if(str2[0]=='+'){
        str2.erase( str2.begin()-1 );
    }

    //str remains with realpart
    return inputStream;
}

1 个答案:

答案 0 :(得分:1)

如果你只是想找一种输入复杂数字的方法,我会提出一种更简单的解决方案,使用标准库中的std::complexhttp://en.cppreference.com/w/cpp/numeric/complex/operator_ltltgtgt

类似的东西:

#include <complex>
#include <string>
#include <iostream>

bool
inputComplexNumber (std::istream& is, std::complex<double>& c)
{
    std::cout << "Please enter your complex number: ";

    is >> c;

    return is.good();
}

int
main ()
{
    std::complex<double> c;

    if (inputComplexNumber(std::cin, c))
        std::cout << c.real() << (c.imag() > 0 ? "+" : "") << c.imag() << "i" << std::endl;
    else
        std::cout << "Bad complex number." << std::endl;
}

样品运行:

Please enter your complex number: (-69.1, 42.2)            
-69.1+42.2i

Please enter your complex number: blah
Bad complex number.

如果你真的想在输入上坚持漂亮的格式,那么我建议你为这种迷你语言编写一些语法,并从中派生出正确的扫描和解析功能。这有点工作,但最终还是值得的。