2017-04-05 127 views
-3

假設一個數學表達式以任意數量的分區/給出。字符串中的分隔符Java

例如:

(x+2)/(1+ 1/(x-2)) 

我怎樣才能在表達輸出每個公約?對於上述示例的輸出必須是:

1+1/(x-2) 
x-2 

因爲有一個除以1+1/(x-2),而這又包含一個除以x-2

我只得到第一個除數,也就是第一個/後面的整個exprss。我如何獲得所有除數?

編輯:他要求的是得到表達式中的所有除數。

+0

到目前爲止您嘗試了什麼? –

+0

你可以鄙視「將會有所有分隔符」的行嗎? –

+0

你可以編輯你的問題一些更清晰的 – Hema

回答

1

除法是a/b形式的表達式,其中a和b本身可以是數字,變量或表達式。 a是「分紅」,b是「除數」。您想要輸出表達式中的每個除數。

這個關鍵是要認識到表達式實際上是一個二叉樹結構。樹的節點是符號,它們組合了兩個子表達式。葉子(沒有後代的節點)是變量或數字。下面是你的表達的例子:

expression tree

頂部操作是去年發生的劃分。左邊是x + 2,它由兩個葉節點(x和2)和+操作組成。右邊是子表達式(1 + 1 /(x-2))。請注意,最後一部分是棘手的。如果你只是從左到右看操作符,你可能會誤解爲(1 + 1)/(x - 2)。但它確實是1 +(1 /(x-2)),因爲你需要考慮運算符的優先級。

你需要做的是創建一個解析器,在內存中構建樹,考慮到括號和運算符的優先級。如果你想要所有的除數,你可以通過樹中的每個節點,如果它是一個分區節點,你要求表達其右側的孩子。必須重新填入圓括號,或者可以在解析過程中緩存部分字符串,並將這些部分鏈接到節點。

這不是一個提供現成的代碼的答案,但正如評論中所述,Stack Overflow不是那個地方。如果問一個非常具體的問題,可能會提供代碼,但對於這樣的更大的問題,我們更願意解釋「如何」,並將實際實施留給您。無論如何,這是你的工作,家庭作業或愛好。