Ich brauche Hilfe auf meiner umgekehrte polnische notation Rechner
Arbeite ich an einem Programm, um eine " umgekehrte polnische notation Rechner und ich Frage mich, wenn jemand kann mir einige Hinweise. Der Rechner wird die Einnahme einer einzelnen Zeile vom Benutzer wie 2 3 + 7 4 - *
; mit Leerzeichen dazwischen, und ich nehme an, drucken Sie ein Ergebnis nach jeder operation.
hier ist ein Teil von meinem code
#include <iostream>
#include <string>
#include <stack>
#include <sstream>
using namespace std;
int main() {
stack<float>stack;
int i;
float num,result,first,second;
char op,ch;
string str;
getline(cin,str);
istringstream is(str);
for(int i=0;i<str.size();i++) {
is>>num;
stack.push(num);
}
for (i=0;i<str.size();++i) {
ch=str[i];
}
if (ch=='+'||'-'||'*'||'/') {
if (ch='+') {
first=stack.top();
stack.pop();
second=stack.top();
stack.pop();
result=first+second;
stack.push(result);
cout<<result;
}
// } //missing from question
//}
Habe ich immer komische zahlen als Ergebnis.
Lese ich in meinen stack richtig?
- Warum schreiben Sie den code in einer nicht lesbaren Weise?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist wahrscheinlich nicht das einzige Problem, aber Sie haben:
wenn du vermutlich eigentlich meinst:
Auch Recht nach, dass Sie:
du vermutlich eigentlich meinst:
=
ist die Zuordnung (sind Siech
zu'+'
) in der Erwägung, dass==
ist-Vergleich (Sie testen, ob oder nichtch
gleich'+'
)Sauberen und eleganten Weg, dies zu tun ist, schieben Sie alle Einträge in den stack(wenn nicht Betreiber)als float, und führen Sie die pop-Operationen auf dem stack, wenn Sie Begegnung ein operator Holen Sie sich die Betreiber. Wenn seine Betreiber Sie zwei pops und Holen Sie sich die operants und nehmen Sie die gewünschte operation und drücken Sie das Ergebnis wieder auf den Stapel
Den Grund für Ihre WLAN-Nummern-Ausgabe ist, dass du die float-Werte der Betreiber auch in den Stapel und Sie in einer Schleife durch den string zu finden die Betreiber. So zum Beispiel 2 3 + 7 4 - * .Sie haben den stack als 2 3 float(+) 7 4 frei(-) float(*)<-wird der stack-Spitze. wenn du also in einer Schleife durch den string ein und finden Sie die ' + ' - symbol. fügen Sie die Werte von float(*) und float(-) und drücken Sie Sie in den Stapel. Ich hoffe, das wird deine Zweifel klar. 🙂
Bearbeiten :
Dies ist der code für die obige Erklärung.