解析复数

Parsing a complex number

我正在尝试以字符或字符串的形式从用户那里获取复数输入,例如: 88.90-55.16i 或 -3.67+5i

然后将其转换为浮点数,保持与上述相同的格式。不是 (x,y)。

char user[100];
vector < float > V;


for (int y = 0; y < 5; y++)
{
    cout << "Enter a complex number:" << endl;
    cin >> user;

    float newfloat = atof(user);


    cout << newfloat << endl;


}

目前无法转换整数。上述输入示例中只有 88 或 -3。

我以前从未使用过 C++,但我确信 float 不符合您的期望。虚数不是浮点数的子集,所以你不能那样做。

我想一种可能的解决方案是编写您自己的假想 class,或者如果有的话,使用内置的。

在你自定义的虚数里也写一个fromString()/toString()class.

您需要将复数的实部和虚部存储在单独的 float 变量中,这些变量可能会也可能不会使用 struct/classstd::pair<>。输入应该是这样的:

std::cout << "Enter a complex number:\n";
float real, imaginary;
char i;
if (std::cin >> real >> imaginary >> i && i == 'i')
{
    ...do something with real & imaginary...
}
else
{
    std::cerr << "unable to parse input as a complex number\n";
    exit(1);
}

(FWIW,这很明显与 this earlier question 有关 - 要么是同一个人使用新用户名,要么是某人在做同样的任务。我在我的回答中提供了一个使用 std::complex<> 的示例程序那里。)

Float 无法存储该类型的数字。浮点数旨在保存单个浮点数,即 10.3 或 5.2。不是 1+2i。那是一个二维量。

我建议您使用 complex<float> 模板作为您的数据类型或创建您自己的 class。在此处查找更多信息:https://msdn.microsoft.com/en-us/library/5de6f0bw.aspx 关于 complex<float> 它带有将字符串转换为复杂类型的内置工具。