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


