Postfix notation und eingabe von Operatoren
-
Hallo zusammen,
ich bin neu hier und habe direkt schon eine Frage wie unverschämt
, aber ich freue mich auf ein paar nette Diskussionen rund ums Thema C\C++.Zu meiner Frage. Ich habe die Aufgabe einen Postfix Rechner zu Programmieren, das habe ich auch soweit alles erledigt.
Nun muss ich aber abfangen wenn der User z.b ++ anstatt nur einem + eingibt und dann eine Fehler meldung raus bringen leider weiß ich nicht wie man abfängt ob es nun ein Plus ist oder zwei.
Also bsp:
2 3 + <- das ist richtig weiter gehts im Programm
2 3 ++ <- das ist falsch Programm abbruch.
Das ganze habe ich in C++ geschrieben.
Ich hoffe mir kann jemand weiterhelfen. Weil google bringt mich gerade überhaupt nicht weiter.
-
Grundansatz:
- jede Zahl wird auf einen Stack gepackt
- ein Operator holt die obersten Werte vom Stack, berechnet ihr Ergebnis und schreibt das Resultat zurück auf den Stack
-->
- wenn zu wenig Werte für den Operator vorhanden sind, kannst du einen Fehler melden
- genauso bei einem unbekannten Operator
-
CStoll schrieb:
Grundansatz:
- jede Zahl wird auf einen Stack gepackt
- ein Operator holt die obersten Werte vom Stack, berechnet ihr Ergebnis und schreibt das Resultat zurück auf den Stack
-->
- wenn zu wenig Werte für den Operator vorhanden sind, kannst du einen Fehler melden
- genauso bei einem unbekannten Operator
Ja das ist ja alles schön und gut und soweit bin ich ja auch aber wie bekomme ich denn nun raus ob es ++ oder + oder ******* oder * ist da liegt ja mein Problem der Rechner selber und er Stack laufen ja einwandfrei bis auf diese zwei abfang routinen.
-
Wenn du die einzelnen Elemente in einen String einliest, kannst du dann problemlos damit weiterarbeiten:
string input; while(input!="=") { cin>>input; if(isdigit(input[0]) { //wir haben (vermutlich) eine Zahl //-> Umwandeln und speichern //evt. Fehleingaben ala "12abs" abfangen } else { //wir haben keine Zahl -> also vermutlich ein Operator //mit der Liste der bekannten Operatoren vergleichen und auswerten //nicht in der Liste = Fehler } }
-
@Ctoll
Danke für deine Hilfe ich habs jetzt verstanden.
Ich habe nochmale eine anschließende Frage.Ist es eigentlich möglich in C++ bei der eingabe in der Konsole unter Linux nur die Tasten von 0-9 und + - * / zu erlauben. Also so das der Nutzer wirklich nicht viel Falsch machen kann????
-
Mit Standardmitteln nicht. Mit Systemmitteln kannst du die Tasten z.B. 'blind' abfragen (per getch()) und unerwünschte Eingaben einfach ignorieren - d.h. wenn der Nutzer z.B. auf 'x' drückt, bemerkt niemand etwas davon.