Saturday, June 05, 2004

 

判斷前、中、後序

一個小小的判斷前、中後序的程式
前序是運算子在兩個運算元之前
後序是運算子在兩個運算元之後
中序就是我們一般所使用的運算式

像是下面三個式子的值是相同的:

我只用短短的regular expression
所以只能判斷一個運算子與兩個運算元
如果要任意運算式丟進來都可以判斷...
那我就不知道那個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

Comments: Post a Comment



<< Home