Saturday, June 05, 2004
判斷前、中、後序
一個小小的判斷前、中後序的程式
前序是運算子在兩個運算元之前
後序是運算子在兩個運算元之後
中序就是我們一般所使用的運算式
所以只能判斷一個運算子與兩個運算元
如果要任意運算式丟進來都可以判斷...
那我就不知道那個pattern是有多複雜了~ *-*
前序是運算子在兩個運算元之前
後序是運算子在兩個運算元之後
中序就是我們一般所使用的運算式
像是下面三個式子的值是相同的:
- 前序 + a b
- 後序 a b +
- 中序 a + b
所以只能判斷一個運算子與兩個運算元
如果要任意運算式丟進來都可以判斷...
那我就不知道那個pattern是有多複雜了~ *-*
import java.util.regex.*; /** * @author Hsiao Yu Cheng */ public class WhatFix{ /** 前序 */ public static final int PREFIX = 0; /** 後序 */ public static final int POSTFIX = 1; /** 中序 */ public static final int INFIX = 2; /** * 判斷前、中、後序 * 例如: * int result = WhatFix.detect("(+ 4654 1464)"); * switch(result){ * case WhatFix.PREFIX: * //前序 * break; * case WhatFix.POSTFIX: * //後序 * break; * case WhatFix.INFIX: * //中序 * break; * } * @param expression * 運算式 * @return 前、中、後序 */ public static int detect(String expression){ //判斷前序 Pattern p = Pattern.compile("([+|-|*|/]\\s+\\d+\\s+\\d+)"); Matcher m = p.matcher(expression); boolean b = m.find(); if(b){ return PREFIX; } //判斷後序 p = Pattern.compile("(\\d+\\s+\\d+\\s+[+|-|*|/])"); m = p.matcher(expression); b = m.find(); if(b){ return POSTFIX; } //中序 return INFIX; } public static void main(String[] args){ int result = detect("(+ 4654 1464)"); switch(result){ case PREFIX: System.out.println("前序"); break; case POSTFIX: System.out.println("後序"); break; case INFIX: System.out.println("中序"); break; } } }由 swanky 發表於 June 5, 2004 11:26 PM