我真的不知道如何处理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);
}