括号补全

编写一段程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。

例如,给定输入:

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

你的程序应该输出:

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

package Algorithm;

import edu.princeton.cs.algs4.*;

public class basement {
	public static void main(String[] args) {
		//开辟两个栈来分开保存操作数和操作符号
		Stack<String> ops=new Stack<String>();
		Stack<String> vals=new Stack<String>();
		while(!StdIn.isEmpty()){
			//当碰到")"时,为前面的一个整体之前加上"("并把连同括号的整体入操作数栈,
			//当标准输入为空后,操作数栈中仅有一个元素,将它输出即可
			String s=StdIn.readString();
			if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("//"))
				ops.push(s);
			else if(s.equals(")")){
				String opt=ops.pop();
				String val=vals.pop();
				String newval="("+vals.pop()+opt+val+")";
				vals.push(newval);
			}
			else
				vals.push(s);
		}
		StdOut.println(vals.pop());
	}
}
编这个程序时不禁想起老师之前的话:“写代码有一个陋习:写代码不加注释;比这更糟的是:写完代码后回过头来加注释”。写这个程序时,我边写注释边理思路,效率有提升! -----大牛老师诚不我欺!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值