2013-09-28 26 views
2

我相當堅持爲給定問題尋找適當的解決方案,一直在尋找通過互聯網的一些想法。無法找到任何。在方程中添加缺少的左括號

問題是:編寫一個程序,該程序從標準輸入中取出沒有左括號的表達式,並打印插入括號的等效中綴表達式。

定表達式:1 + 2) * 3 - 4)* 5 - 6)))
輸出:((1 + 2) * ((3 - 4) * (5 - 6)))

有什麼可以解決這個問題最好的辦法?

+3

你怎麼知道它不應該是'1 +((2)* 3 - ((4)* 5 - (6)))'? –

+0

你只想在前一個右括號的後面的操作數之後加一個左括號嗎? – jab

+0

@lc,導致輸出格式已作爲答案給出。 –

回答

9

我認爲我們的目標是假定你只是括號表達式而不是單獨的數字。

所以你要抓住每個令牌和他們折騰一摞

2 
+ 
1 

抓下一個記號,這是) 現在拿前三名堆棧內且夾着它的括號之間( 1 + 2),將它作爲一個表達式放回棧中。

下一個推棧看起來像這樣

4 
- 
3 
* 
(1 + 2) 

拉出前三名,並把它背在棧上括號 (3-4) * (1 + 2)

和再次

6 
- 
5 
* 
(3-4) 
* 
(1+2) 

我們擊中另一個paren並再次從棧中抓取前3,加括號並推回

(5-6) 
* 
(3-4) 
* 
(1+2) 

我們去搶另一個的括號,再次抓住從堆棧頂部3,圓括號和推回

((3-4)*(5-6)) 
* 
(1+2) 

,並再次...

((1 + 2) * ((3 - 4) * (5 - 6))) 

沒有更多的投入,所以這是我們的答案

+0

美妙,這是通過的方式。你是一個很好的幫助@goaj –

+0

@mehdix_歡迎,不要忘了標記它是正確的答案,如果它幫助你。 – agoaj

+0

由於最終括號不平衡,因此存在錯誤。 – TheM00s3