从多项式函数字符串动态分配数组

时间:2017-04-25 17:17:59

标签: c++ arrays string pointers

所以我有一个多项式加法问题,如下所示:

(1*x+2*x^3-1*x+7)+(1+1*x^2-1*x+1*x^4)

我需要弄清楚如何提取系数和指数的数字,并将它们输入到动态分配的2D数组中(从这里我可以对它们进行排序并在输出答案之前将它们加在一起)。

我很遗憾如何做到这一点,因为多项式可以是任何度数级别并包含任意数量的项。在我提取所有数字后,我可以动态分配它们。我需要帮助的部分是:

  • 提取所有数字
  • 区分它们以查看它是系数还是指数
  • 允许任意数量的条款

如果有人能够回答这个问题,或者至少指出我正确的方向,我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

您的问题看起来像是解析和评估。

  • 步骤1:你需要解析字符串,假设有一个中缀表达式,所以 你可以提出系数

  • 步骤2:将这些系数推入 vector / deque 等以执行 多项式计算。

以下是一些很好的例子:

Evaluating arithmetic expressions from string in C++

What is the best way to evaluate mathematical expressions in C++?

答案 1 :(得分:0)

要从字符串中提取系数,您需要创建解析器。您可以使用boost.spirit这样的特殊库,您可以使用构建Flex等解析器的特殊工具,也可以使用正则表达式手动创建自己的工具。

要存储系数,您可以使用std::vector<int>使用索引作为x的幂,因此对于1 * x + 2 * x ^ 3-1 * x + 7,您的向量将具有数据:

{ 7, -1, 0, 2 } // 7*x^0 + -1*x^1 + 0*x^2 + 2*x^3 

然后您不需要对它们进行排序以添加系数。要存储所有多项式,请相应地使用std::vector<std::vector<int>>