Im Folgenden versuche ich ein Programm zu schreiben, das Postfix-Ausdrücke auswertet. Mir ist jedoch aufgefallen, dass die beiden Elemente, die ich einstellen möchte, nicht auf die richtigen Werte eingestellt sind. Ich lerne immer noch die Stack-Funktion in der C++ - Bibliothek, also wenn jemand erklären könnte, warum das passiert, würde ich es sehr schätzen!PostFix-Funktion auswerten
/*Sample output:
Enter an infix or prefix expression:3+4-1
Postfix is: 34+1-
postFix[i]: 3
postFix[i]: 4
element1: 52
element2: 51
val is: 103
postFix[i]: 1
element1: 49
element2: 103
val is: 54
Value is 54*/
int evaluatePostfix (string postFix)
{
stack<int> operands;
int length = postFix.length();
int val = 0;
for (int i = 0; i < length; i++)
{
//if the char is a digit push the digit onto the stack
if(isdigit(postFix[i]))
{
operands.push(postFix[i]);
cout << "postFix[i]: " << postFix[i] << endl;
}
else if (isOperator(postFix[i]))
{
//
//element 1 and element 2 will be the element on the top of the stack
//
int element1 = operands.top();
cout << "element1: " << element1 << endl;
operands.pop();
int element2 = operands.top();
cout << "element2: " << element2 << endl;
operands.pop();
//
//create a switch statement that evaluates the elements based on the operator
//
switch(postFix[i])
{
case '+':
val = element2 + element1;
cout << "val is: " << val << endl;
operands.push(val);
break;
case '-':
val = element2 - element1;
cout << "val is: " << val << endl;
operands.push(val);
break;
case '*':
val = element2 * element1;
operands.push(val);
break;
case '/':
val = element2/element1;
operands.push(val);
break;
default:
return 0;
}
}
}
return val;
}
Können Sie ein solides Beispiel geben? Zum Beispiel, ich drücke 3, aber es erscheint 42. – ChiefTwoPencils
Ich denke, das ist das Problem hier. Ich schiebe diese Elemente auf den Stapel, aber die Elemente, die ich auf den Stapel schiebe, sind nicht die Elemente, die abgeknickt werden. Also, zum Beispiel, drücke ich 3 und 4. Dann sieht das Programm den Operator '+' und beschließt, die oberen zwei Elemente, die 3 und 4 sein sollten, herauszuspringen, aber es springt von Zufallszahlen wie 52 und 51 ab Ich bin mir nicht sicher, warum es das tut –