1. 题目
编写一段程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。
例如,给定输入:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) ),程序应该输出:( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) )。
2. 思路
- 初始化两个栈,一个用于保存运算符,一个用于保存操作数;
- 读取标准输入,将操作数压入操作数栈,将运算符压入运算符栈;
- 在遇到右括号时,弹出一个运算符,弹出两个操作数;
- 组合运算符和操作数,并在两端添加左右括号,将结果压入操作数栈。注意此时压入的不再是单纯的操作数,而是操作数、运算符及括号的组合字符串。
3. 代码
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class lx139 {
public static void main(String[] args) {
Stack<String> ops = new Stack<>();
Stack<String> vals = new Stack<>();
while(!StdIn