Ниже я пытаюсь написать программу, которая оценивает постфиксные выражения. Тем не менее, я заметил, что два элемента, которые я настраиваю для работы, не устанавливаются в правильные значения. Я все еще изучаю функцию стека в библиотеке C++, поэтому, если кто-нибудь сможет объяснить, почему это происходит, я бы очень признателен!Оценка функции PostFix
/*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;
}
Можете ли вы привести убедительный пример? Например, я нажимаю 3, но он появляется 42. – ChiefTwoPencils
Я думаю, что здесь проблема. Я нажимаю эти элементы в стеке, но элементы, которые я нажимаю на стек, не являются элементами, которые выталкиваются. Так, например, я нажимаю 3 и 4. Затем программа видит оператор «+» и решает выскочить два верхних элемента, которые должны быть 3 и 4, но они выходят из случайных чисел, таких как 52 и 51. I я не уверен, почему он это делает –