程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 中綴表達式轉為後綴表達式

中綴表達式轉為後綴表達式

編輯:C++入門知識

中綴表達式轉為後綴表達式


**
 * 中綴表達式轉後綴表達式
 * 
 * 作用:將一長串計算表達式轉換為計算機易於操作的字符序列,用於計算器的設計
 *
 * 參與轉換運算符
 * +-/*()^% 
 * 
 * 
 * 使用StringBuilder來保存轉換出的後綴表達式
 * 使用棧來操作運算符
 * 
 * 
 * 轉換原則
 * 1.上述字符中()沒有優先級值,+-優先級值為1,/*%優先級值為2,^優先級值為3
 * 2.對於一個待計算的表達式,從左向右逐個檢查每個字符
 * 3.遇到數字,直接append到StringBuilder
 * 4.遇到 ( 括號,直接push入棧
 * 5.遇到 ) 括號,pop出棧中的操作符並append到StringBuilder中直到遇到 ( 括號,如果在棧空之前沒有發現 ( 括號,拋出異常
 * 6.對於其他操作符,如果棧頂是 ( ,直接push入棧
 * 7.否則,如果棧頂操作符優先級值大於它,則在棧不空之前,pop出棧中的操作符並append到StringBuilder中,
 * 直到遇到比它優先級小的操作符,這個比它優先級小的操作符不出棧,最後將此操作符push入棧中
 * 8.檢查完每一個字符後,如果棧中還有操作符,將這些操作符直接append到StringBuilder中
 * 
 * 最後StringBuilder中保存的就是後綴表達式
 * **/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class change {
	public static void main(String[] args) throws IOException{
		intopost itp=new intopost();
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		String infix,postfix=null;
		while((infix=bf.readLine())!=null){
			postfix=itp.inToPost(infix);
			System.out.println(postfix);
		}
	}
}


class intopost{
	 public String inToPost(String infix){
		 Stack sk=new Stack();
		 StringBuilder sb=new StringBuilder();
		 char[] ch=infix.toCharArray();
		 for(int i=0;i sk,Character ch){
		 operator chh=new operator(ch);
		 if(sk.isEmpty() || ch.equals('(') || sk.peek().tmp.equals('(')){
			 sk.push(chh);
			 return;
		 }
		 if(ch.equals(')')){
			 if(sk.isEmpty())
				 throw new RuntimeException();
			 while(!sk.peek().tmp.equals('(')){
				 sb.append(sk.pop().tmp);
				 if(sk.isEmpty())
					 throw new RuntimeException();
			 }
			 sk.pop();
			 return;
		 }
		 if(chh.RANK

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved