2017-05-14 66 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