从多项式函数字符串动态分配数组
Posted
技术标签:
【中文标题】从多项式函数字符串动态分配数组【英文标题】:Dynamically Allocating an Array from a Polynomial Function String 【发布时间】:2017-04-25 17:17:58 【问题描述】:所以我有一个多项式加法问题,如下所示:
(1*x+2*x^3-1*x+7)+(1+1*x^2-1*x+1*x^4)
我需要弄清楚如何提取系数和指数的数字并将它们输入到动态分配的二维数组中(从这里我可以在输出答案之前对它们进行排序并将它们相加)。
我对如何做到这一点非常迷茫,因为多项式可以是任何程度的顺序并且包含任何数量的项。我可以在提取所有数字后动态分配它们。我需要帮助的部分是:
提取所有数字 区分它们是系数还是指数 允许在任意数量的术语中发生这种情况如果有人能回答这个问题或至少为我指出正确的方向,我将不胜感激。
【问题讨论】:
您要查找的内容称为std::vector
,并且可以是具有两个成员的术语类或std::pair
。
【参考方案1】:
您的问题看起来像它的解析和评估。
Step1:你需要假设一个中缀表达式来解析字符串,所以 你可以拉出系数
第 2 步:将这些系数推入 vector/deque 等以执行 多项式计算。
这里有一些很好的例子:
Evaluating arithmetic expressions from string in C++
What is the best way to evaluate mathematical expressions in C++?
【讨论】:
【参考方案2】:要从字符串中提取系数,您需要创建一个解析器。你可以使用像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>>
。
【讨论】:
以上是关于从多项式函数字符串动态分配数组的主要内容,如果未能解决你的问题,请参考以下文章