2015-10-18 1 views
0

Comment convertir les caractères de ce code en chaînes? L'InfixToPostfix doit être en mesure de prendre des chaînes plutôt que des caractères afin de pouvoir accepter des nombres et des espaces à deux chiffres. Aucune suggestion? Merci d'avance.InfixToPostfix convertir le caractère en chaîne

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; 
} 

}

Répondre

0

je diviser le code en deux avec une phase d'analyse lexicale qui divise l'entrée en jeu de jetons. Ceux-ci sont ensuite transmis à l'algorithme de triage, qui utilise un tableau de jetons. Dans la phase de lexage, vous pouvez utiliser des expressions régulières pour détecter le type d'entrée différent. Say/\ d +/détecte la séquence d'un ou de plusieurs chiffres.