表达式求值
来源:互联网 发布:淘宝刷钻平台源码 编辑:程序博客网 时间:2024/06/07 02:32
5-9 表达式转换 (25分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+
、-
、*
、\
以及左右括号()
,表达式不超过20个字符。
输出格式:
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。
输入样例:
2+3*(7-4)+8/4
输出样例:
2 3 7 4 - * + 8 4 / +
import java.util.Scanner;import java.util.Stack;public class Main{static String midToPost(String str){char[] ch=str.toCharArray();Stack<Character> stack=new Stack<Character>();StringBuilder sb=new StringBuilder();boolean flag=true;for(int i=0;i<ch.length;i++){char c=ch[i];switch(c){case '(':stack.push(c);break;case ')':while(stack.peek()!='('){sb.append(stack.pop());}stack.pop();break;case '-':case '+':if(!( i!=0 && (( Character.isDigit(ch[i-1]) && Character.isDigit(ch[i+1]) || ch[i+1]=='(' ) || ch[i-1]==')' ))){if(i!=0)sb.append("#");if(c=='+'){ sb.append("@");}else{sb.append("!");}flag=true;}else{while(!stack.isEmpty() && stack.peek()!='('){sb.append(stack.pop());}stack.push(c);flag=false;}break;case '/':case '*':while(!stack.isEmpty() && stack.peek().toString().matches("[*/]")){sb.append(stack.pop());}stack.push(c);flag=false;break;default:if(flag==false){sb.append('#');}sb.append(c);flag=true;break;}}while(!stack.isEmpty()){sb.append(stack.pop());}return sb.toString();}public static void main(String[] args) {Scanner in=new Scanner(System.in);while(in.hasNext()){String str=in.next();//System.out.println(midToPost(str));char[] ch=midToPost(str).toCharArray();for(int i=0;i<ch.length;i++){char c=ch[i];if(Character.isDigit(c) || c=='.'){System.out.print(c);}else if(c=='#'){System.out.print(" ");}else if(c=='!'){ System.out.print("-"); }else if(c=='@'){System.out.print("");}else{System.out.print(" "+c);}}}}}
1 0
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- 表达式求值
- luogu P1217 [USACO1.5]回文质数 Prime Palindromes
- Java NIO 系列教程
- 辗转相除法
- VS2013+Opencv3.0开发环境的搭建
- c++ Windows下超时文件删除
- 表达式求值
- POJ3259 Wormholes
- 最小乘车费用
- 判断网络连接
- SpringMVC 集成velocity
- JVM理解
- Windows 服务快捷启动命令
- 加速我们的maven下载速度
- 时间管理(个人觉得不错)