解析一个复数

时间:2015-02-03 04:10:36

标签: c++ string-parsing complex-numbers

我试图以char或string的形式从用户那里获取复数输入,如:     88.90-55.16i或-3.67 + 5i

然后将其转换为float,保持与上面相同的格式。不是(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。

3 个答案:

答案 0 :(得分:2)

您需要将复数的实部和虚数组件存储在单独的float变量中,这些变量可能会也可能不会使用struct / class或{{1 }}。输入应该是这样的:

std::pair<>

(FWIW,这显然与this earlier question有关 - 使用新用户名的同一个人,或者做同一作业的人。我在答案中使用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); } 提供示例程序。 )

答案 1 :(得分:2)

Float无法存储该类型的号码。浮点数被设计为保持单个浮点数,即10.3或5.2。不是1 + 2i。这是一个二维数量。

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

答案 2 :(得分:1)

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

我想一个可能的解决方案是编写自己的虚构类,或者如果有的话,可以使用内置类。

还要在自定义虚构类中编写fromString()/ toString()。