Постфиксная запись. Что не так с кодом?

#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
  1. cin прерывает ввод, когда встречает в входной строке пробельный символ. воспользуйтесь функцией std::getline

    std::string str;

    std::getline(cin, str);

  2. Вы добавляете в стек без правильного приведения представления цифры char к типу int, правильно делать так:

    #include <stdlib.h>

    stack.push( atoi(&(str[i])) );

В вашем коде в стек попадает ASCII-код числа, а не само число.

Правильный код: http://cpp.sh/2k3eu

→ Ссылка