酷狗+给缺少左括号的增加括号

本文介绍了一个Java程序,用于从标准输入接收一个含有缺失左括号的数学表达式,并通过算法自动补全括号,最终输出正确的中序表达式。示例输入为'1+2)*3-4)*5-6)))',输出为'((1+2)*((3-4)*(5-6)))'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.*;

/**

  • Created by Blue on 2016/7/3.

  • 从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式;

  • 输入: 1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )

  • 输出: (( 1 + 2 ) * (( 3 - 4 ) * ( 5 - 6 ) ) )
    */
    public class Main {

    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
    char[] arr = input.toCharArray();

     Stack<String> ops = new Stack<>();  // 符号栈
     Stack<String> vals = new Stack<>(); // 数值栈,由于不需要运算,参数类型使用String,而非double;
    
     for(int i=0;i<arr.length;i++){
         String s = arr[i]+"";  // 读取字符串,每次一个,以空格隔开;
    
         if (s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/"))
             ops.push(s);
         else if (s.equals(")")) {
             // 此处,两边的括号是“)”、“(”,而非“(”、“)”;
             String expre = ")" + vals.pop() + ops.pop() + vals.pop() + "(";
    
             // 注意,整个表达式作为一个整体,也就是单个字符串压入栈顶;
             vals.push(expre);
         } else
             vals.push(s);
     }
    
     String result = vals.pop();
     // output: result: )))6-5(*)4-3((*)2+1((
     System.out.println("result: " + result);
    
     // 更改逆序为顺序
     String seq = "";
     for (int i = result.length()-1; i >= 0; i--){
         seq += result.charAt(i);
     }
    
     // output: seq: ((1+2)*((3-4)*(5-6)))
     System.out.println("seq: " + seq);
    

    }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值