rpn计算器如何处理e?

时间:2017-11-07 11:25:48

标签: c++ rpn

我真的不知道如何处理e。该计算器适用于:

  

3E-3
  3E3

即使我写道:

  

-e或-e-

计算器知道这是无效输入。

但是当我写道:

  

3-e-3或3-e3

计算器无法识别出这是无效输入。

有人能帮助我吗?

我正在考虑用isdigit编写一个函数来检查输入字符串是否为数字。但isdigit是否知道+-等预先签名?

#include <iostream>
#include <stack>
#include <sstream>

using namespace std;
bool isOperator(const string& input);
void performOp(const string& input, stack<double>& RechnerStack);

// Main
int main()
{
    cout << "Der UPN Taschenrechner" << endl;

    stack<double> RechnerStack;
    string input;

    while (true)
    {
        cout << ">>";
        cin >> input;
        double Zahl;
        if (istringstream(input) >> Zahl)
        {
            RechnerStack.push(Zahl);
        }

        else if (isOperator(input))
        {
            performOp(input, RechnerStack);
        }

        // check for quit
        else if (input == "q")
        {
            return 0;
        }
        // invalid output
        else
        {
            cout << "Invalid input" << endl;
        }
    }
}

bool isOperator(const string& input)
{
    string ops[] = { "-", "+", "*", "/" }; // string array mit verfügbaren Operatoren

    for (int i = 0; i < 4; i++)
    {
        if (input == ops[i])
        {
            return true;
        }
    }
    return false;
}

void performOp(const string& input, stack<double>& RechnerStack)
{
    double zahl1, zahl2, ergebnis;

    zahl2 = RechnerStack.top();
    RechnerStack.pop();

    zahl1 = RechnerStack.top();
    RechnerStack.pop();

    if (input == "-")
    {
        ergebnis = zahl1 - zahl2;
    }
    else if (input == "+")
    {
        ergebnis = zahl1 + zahl2;
    }
    else if (input == "*")
    {
        ergebnis = zahl1 * zahl2;
    }
    else
    {
        ergebnis = zahl1 / zahl2;
    }

    cout << ergebnis << endl;
    RechnerStack.push(ergebnis);
}

0 个答案:

没有答案