Расчет польского выражения

я ищу что-то, что объясняет, как я могу рассчитать Polish Expression, пример:

если у меня есть это ((1+2)*4)+3по-нормальному 1+2*4+3 = 15, но мне нужно
напишите так: 12+4*3+ использовать stack получить значение top и снова поместить в стек, смотрите мой код: https://ideone.com/0bdkkM

я уже вижу один пост, но я не понимаю, как я могу сделать необходимые операции: Переполнение стека

0

Решение

Вот простой оценщик RPN, без какой-либо обработки ошибок. Вам нужен только стек для хранения операндов, а не операторов, что делает его довольно простым для реализации.

Обратите внимание, что в этой версии предполагается, что операнды представляют собой однозначные числа во входном выражении. Я сделал это, чтобы упростить синтаксический анализ выражения RPN. В реальной жизни вы бы хотели обрабатывать многозначные операнды.

std::stack<int> stack;

const char *expression="12+4*3+";

for(char c=*expression; c!=0; c=*expression++)
{
switch(c)
{
case '+':
{
int rhs=stack.top();    stack.pop();
int lhs=stack.top();    stack.pop();
int result=lhs+rhs;
stack.push(result);
break;
}

case '-':
{
int rhs=stack.top();    stack.pop();
int lhs=stack.top();    stack.pop();
int result=lhs-rhs;
stack.push(result);
break;
}

case '*':
{
int rhs=stack.top();    stack.pop();
int lhs=stack.top();    stack.pop();
int result=lhs*rhs;
stack.push(result);
break;
}

case '/':
{
int rhs=stack.top();    stack.pop();
int lhs=stack.top();    stack.pop();
int result=lhs/rhs;
stack.push(result);
break;
}

default:
int number=(c-'0');
stack.push(number);
break;
}
}

int final_result=stack.top();
std::cout << "result is " << final_result << std::endl;
1

Другие решения

Причина, по которой Reverse Polish стала популярной, заключается в том, что она хорошо сочетается с компьютерной концепцией стека.

Когда пользователь вводит число, поместите его в стек.

Когда пользователь вводит оператор, извлекает 2 числа из стека, вычисляет результат и помещает результат обратно в стек.

1

По вопросам рекламы [email protected]