Постфиксная запись. Что не так с кодом?
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
stack <int> stack;
string str;
cin >> str;
for (int i = 0; i < str.length(); i++)
{
if (isdigit(str[i]))
{
stack.push(str[i]);
}
else if (str[i] == '+')
{
int a, b;
a = stack.top();
stack.pop();
b = stack.top();
stack.pop();
stack.push(b + a);
}
else if (str[i] == '-')
{
int a, b;
a = stack.top();
stack.pop();
b = stack.top();
stack.pop();
stack.push(b - a);
}
else if (str[i] == '*')
{
int a, b;
a = stack.top();
stack.pop();
b = stack.top();
stack.pop();
stack.push(b * a);
}
}
cout << stack.top();
Ответы (1 шт):
Автор решения: OlegUP
→ Ссылка
cinпрерывает ввод, когда встречает в входной строке пробельный символ. воспользуйтесь функциейstd::getlinestd::string str;std::getline(cin, str);Вы добавляете в стек без правильного приведения представления цифры
charк типуint, правильно делать так:#include <stdlib.h>stack.push( atoi(&(str[i])) );
В вашем коде в стек попадает ASCII-код числа, а не само число.
Правильный код: http://cpp.sh/2k3eu

