2015-10-18 3 views
0

Как преобразовать символы в этот код в строки? InfixToPostfix должен иметь возможность принимать строки, а не символы, чтобы он мог принимать двузначные числа и пробелы. Какие-либо предложения? Заранее спасибо.InfixToPostfix преобразовать символ в строку

import java.util.Stack; 

public class InfixToPostfix 
{ 
private Stack operators = new Stack(); 

public InfixToPostfix() 
{ 

} 

public String toPostfix(String infix) 
{ 
    char[] characters = new char[100]; 
    int i; 
    int length = infix.length(); 
    infix.getChars(0, length, characters, 0); 
    char operator; 
    String output = ""; 

    for (i = 0; i < length; i++) 
    { 
     if (isOperator(characters[i])) 
      if (operators.empty()) 

       operators.push(characters[i]); 
      else 
      { 
       if (operatorLessPrecedence(characters[i])) 

       { 
        do 
        { 
         output = output + operators.pop(); 
        } 
        while (!operators.empty() && operatorLessPrecedence(characters[i])); 
        operators.push(characters[i]); 
       } 
       else 

        operators.push(characters[i]); 
      } 
     else 

      output = output + characters[i]; 
    } 
    while (!operators.empty()) 
    { 

     operator = (char)operators.pop(); 
     output = output + operator; 
    } 
    return output; 
} 

/** 
* operator 
*/ 

public boolean isOperator(char c) 
{ 
    if (c == '*' || 
     c == '/' || 
     c == '+' || 
     c == '^' || 
     c == '-') 
     return true; 
    else 
     return false; 
} 


public boolean operatorLessPrecedence(char o) 
{ 
    int operatorPrecedence = precedence(o); 
    int tosPrecedence = precedence((char)operators.peek()); 
    return (operatorPrecedence <= tosPrecedence); 
} 

/** 
* precedence 
*/ 
public int precedence(char o) 
{ 
    switch (o) 
    { 
     case '+': return 1; 
     case '-': return 1; 
     case '*': return 2; 
     case '/': return 2; 
     case '^': return 3; 
    } 
    return 5; 
} 

}

ответ

0

Я хотел бы разделить код на две части с лексической фазы анализа, который расщепляет вклад в набор маркеров. Затем они передаются алгоритму шунтирующего двора, который использует массив токенов. На этапе лексики вы можете использовать регулярные выражения для определения типа ввода. Скажем/\ d +/определяет последовательность одной или нескольких цифр.