C ++中的RPN和Stack.pop()

时间:2013-09-15 08:24:23

标签: c++ stack

我正在尝试用C ++实现RPN计算器。以下是该计划的重要部分。

#include <iostream>
#include <stack>
#include <cctype>
#include <string>

using namespace std;

bool isNumberString(string &str);

int main()
{
    cout << "RPN Calculator Simulation" << endl;

    while (true)
    {
        string input;
        stack<double> operandStack;
        double lhs, rhs, result;

        cout << "> ";
        getline(cin, input);

        if (input == "Q" || input == "") {
            return 0;

        } else if (isNumberString(input)) {
            operandStack.push(atof(input.c_str()));

        } else if (input == "+") {
            rhs = operandStack.top();
            lhs = operandStack.top();

            result = lhs + rhs;
            operandStack.push(result);

        } else {
            cout << "Invalid command. Please try again." << endl;
        }
    }

    return 0;
}

bool isNumberString(string &str)
{
    if (str.length() == 0) return false;

    int numberOfDots = 0;

    for (size_t i = 0; i < str.length(); i++)
    {
        if (str[i] == '.')
        {
            if (++numberOfDots > 1) return false;
        }
        else if (!isdigit(str[i]))
        {
            return false;
        }
    }

    return true;
}

运行并输入两个数字,并在命令行提示符下输入“+”时,出现“Expression:deque iterator not dereferencable”错误。

有人可以提供有关我的代码问题的建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您必须收到运行时错误

当您每次在while循环中创建新筹码时,stack在输入+时没有任何内容

stack<double> operandStack;

应该在while循环

之外

结果也是在错误的输入上计算出来的,你需要修改一些修改逻辑的结果。