Ich habe eine Frage auf Parser, wenn ein Benutzer den Ausdruck wie (a+b*c(d-e)
eingibt, vergaß er, die andere schließende Klammer einzugeben, und das Programm sollte einen Fehler wie It's a wrong Expression
geben. Bitte helfen Sie mir bei diesem Programm, ich habe keine Ahnung, wie ich anfangen soll.Wie Token aus einer mathematischen Gleichung zu analysieren?
Antwort
Verwenden Sie eine stack
Datenstruktur, um den Klammervergleich zu validieren.
Wenn das Zeichen '(','{','['
Push das Zeichen auf den Stapel, wenn das Zeichen ')','}',']'
jeweils für die passende Öffnung Halterung ist dann pop. Fahren Sie fort, bis der Stapel leer ist.
Code:
import java.util.*;
class ParenthesisMatching
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Stack<Integer> stk = new Stack<Integer>();
System.out.println("Enter expression");
String exp = scan.next();
if(isValid(exp))
System.out.println("matched");
else System.out.println("unmatched");
}
public static boolean isValid(String s) {
HashMap<Character, Character> map = new HashMap<Character, Character>();
map.put('(', ')');
map.put('[', ']');
map.put('{', '}');
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char curr = s.charAt(i);
if (map.keySet().contains(curr)) {
stack.push(curr);
} else if (map.values().contains(curr)) {
if (!stack.empty() && map.get(stack.peek()) == curr) {
stack.pop();
} else {
return false;
}
}
}
return stack.empty();
}
}
genau! Dies ist ein paranthesis passendes Problem – JavaHopper
Gibt es einen CODE dafür und macht mein Programm laufen. – Akon
Was ist, wenn ein '+' ohne zweiten Operanden gefunden wird? Oder ist das nicht Teil des Problems? – TsundereBug
den Eingang Parse, wann immer eine Öffnung "(". Gefunden wird, schieben Sie es auf Stapel Pop-Stack, wenn ")" angetroffen wird. Nachdem alle Eingabe-Token verarbeitet wurden, prüfen Sie, ob der Stapel leer ist. Wenn eine leere Eingabe korrekt ist, ansonsten falscher Ausdruck. – JavaHopper