Die Konvertierung von Infix-Ausdrücken in Postfix-Ausdrücke erfordert einen sorgfältigen Umgang mit Klammern. Das Vorhandensein von Klammern stellt die Bestimmung der korrekten Reihenfolge der Operationen vor Herausforderungen. Um dieses Problem zu lösen, kann der folgende Ansatz verwendet werden:
Linke Klammern verschieben: Wenn Sie auf eine linke Klammer stoßen, schieben Sie sie auf den Operatorstapel.
Rechte Klammern verarbeiten: Beim Auftreffen auf ein Recht Klammer:
Der folgende Java-Code zeigt, wie die toPostFix()-Methode geändert wird, um Klammern zu verarbeiten:
public String toPostFix() { StringBuilder postfixstr = new StringBuilder(); Stack<Token> in_fix = new Stack<>(); Stack<Token> post_fix = new Stack<>(); for (int i = tokens.length - 1; i >= 0; i--) { t = new Token(tokens[i]); in_fix.push(t); } //there are still tokens to process while (!in_fix.empty()) { // is a number if (in_fix.peek().type == 1) { postfixstr.append(in_fix.pop().toString()); } // is an operator and the stack is empty else if (in_fix.peek().type == 3 && post_fix.empty()) { post_fix.push(in_fix.pop()); } // is an operator that has higher priority than the operator on the stack else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() > post_fix.peek().isOperator()) { post_fix.push(in_fix.pop()); } // is an operator that has lower priority than the operator on the stack else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() <= post_fix.peek().isOperator()) { postfixstr.append(post_fix.pop()); post_fix.push(in_fix.pop()); } // opening ( else if (in_fix.peek().type == 4) { post_fix.push(in_fix.pop()); } // closing ) else if(in_fix.peek().type == 5){ while(!(post_fix.isEmpty() || post_fix.peek().type == 4)){ postfixstr.append(post_fix.pop()); } if (post_fix.isEmpty()) ; // ERROR - unmatched ) else post_fix.pop(); // pop the ( in_fix.pop(); // pop the ) } //puts the rest of the stack onto the output string if (in_fix.empty()) { while (!post_fix.empty()) { postfixstr.append(post_fix.pop()); } } } return postfixstr.toString(); }
By Durch die Umsetzung dieser Schritte kann die toPostFix()-Methode Ausdrücke mit Klammern effektiv verarbeiten, die richtige Reihenfolge der Operationen sicherstellen und das gewünschte Postfix erzeugen Ausdrücke.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Klammern bei Infix-zu-Postfix-Konvertierungen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!