2017-05-14 42 views
1

我试图做一个衍生计算器(我不得不使用链表)。衍生计算器使用LinkedList的C++

每个节点的结构应该如下:

struct node { 
    int coefficient; 
    string function; 
    int power; 
    node*fx; 
    node*gx; 
    node*next; 
}; 

|系数|函数|电源| f(x)| g(x)|下一页|


输入表示例如:

3X^2((3×-3)/(4×2))+ SIN(4X-3)

系数*函数^功率(F (X)/ G(X))+下一


我尝试使用正则表达式,但它并不容易,当涉及到嵌套表达式一起工作,因为用户可能会引发未知的许多功能。

我知道,我必须以某种方式解析表达式,那么一切都分成载体中,然后节点填补,但我只是不能,因为我是相当新的C++编写一个逻辑。

我也试图与ExprTk工作,但我发现很难理解,我找不到它的任何在线教程,除了随之而来的自述文件。

如果有人能指导我在正确的方向或告诉我一个教程,将是巨大的。

+0

你可以在用括号括起来的时候用'+'分割输入,所以你只需要处理一个'coefficient * function^power(f(x)/ g(x))'列表(不要分割如果f(x)或g(x)包含一个“+”),这意味着解析函数或正则表达式不再需要处理任意数量的函数,而只能处理1.然后,您可以递归地调用解析函数来填充在'F(X)','G(X)'和'next'。 – nwp

+0

谢谢!这解决了嵌套问题。 – Mincer

回答

0

,我认为它是可行的与正则表达式,但你必须把他们在正确的顺序。例如:

3x^2((3x-3)/(4x-2))+ sin(4x-3)→3x^2((3x-3)/(4x-2))+ sin (n1)→3x^2((3x-3)/ n2)+ sin(n1)→3x^2(n3/n2)+ sin(n1)→...

等正则表达式是这样的:

\ d + \ d - >功能= +

\ D- \ d - > =功能 -

在每个步骤中,您在内存中创建新的节点,并把它串在也作为“n%nodeNum”。

+0

谢谢!我现在得到了它的窍门。 – Mincer