我很难找到针对特定问题的正确解决方案,一直在互联网上寻找一些想法。无法找到任何。
问题是:编写一个程序,从标准输入中获取一个没有左括号的表达式,并打印插入括号的等效中缀表达式。
给出表达式:1 + 2) * 3 - 4)* 5 - 6)))
输出:((1 + 2) * ((3 - 4) * (5 - 6)))
解决这个问题的最佳方法是什么?
答案 0 :(得分:9)
我认为目标是假设你只是表达式括号,而不是单独的数字。
所以你要抓住每个令牌并将它们扔到堆栈上
2
+
1
抓住下一个令牌,这是 现在取出堆栈的前三个并将它夹在那些parens(1 + 2)之间,将它作为一个表达式放回堆栈。
接下来推送堆栈看起来像这样
4
-
3
*
(1 + 2)
拉出前三名并将其放回到括号内的堆栈中 (3-4) * (1 + 2)
再次
6
-
5
*
(3-4)
*
(1+2)
我们击中另一个paren并再次从筹码中抢到前3名,括号并推回
(5-6)
*
(3-4)
*
(1+2)
我们抓住另一个paren,再次从筹码中抓住前三名,括号并推回
((3-4)*(5-6))
*
(1+2)
再次......
((1 + 2) * ((3 - 4) * (5 - 6)))
没有更多输入,所以这是我们的答案