本文使用标准库
#include<iostream>
#include<stack>
using namespace std;
void Error(string c)
{
cout << c << endl;
exit(0);
}
int calculator(stack<double> OPND, char c)
{
int a, b;
a = OPND.top();
OPND.pop();
b = OPND.top();
OPND.pop();
switch (c)
{
case '*':return b * c;
break;
case'/':
if (b == 0)
{
Error("除法时分母不能为零");
}
return a / b;
break;
case '+':
return a + b;
break;
case'-':
return a - b;
break;
default:Error("运算错误");
}
}
bool check(char a)
{
if (a == '+' || a == '-' || a == '*' || a == '/')
{
return true;
}
else return false;
}
double calculate() { // 从键盘输入逆波兰表达式,以‘ $ ’表示输入结束,本算法求逆波兰式表达式的值。
stack<double> OPND;//数操作站
double num = 0.0; // 数字初始化。
char x[1000];
double x1, x2;
cin。get(x,1000); //x 是字符型变量。cin.get()可以带空格的字符串输入,一般的如cin都会在空格处停止
for (int i=0;x[i] != '$'&&i<1000;i++)
{
char m = x[i];
if (('0' <= x[i]&& x[i] <= '9') || x[i] == '.')
{
while ((x[i] >= '0' && x[i] <= '9') || x[i] == '.')
{
if (x[i] != '.') { num = num * 10 + (double(x[i]) - double('0')); i++; } // 处理整数
else
{
double scale = 10.0;
i++; // 处理小数部分。
while (x[i] >= '0' && x[i] <= '9')
{
num = num + (int(x[i]) - int('0')) / scale;
scale = scale * 10;
i++;
}
}
}
OPND.push(num);
num = 0.0;// 数压入栈,下个数初始化
}
if(x[i] ==',') continue; // 遇空格,继续读下一个字符。
if (check(x[i]))
{
OPND.push(calculator(OPND, x[i]));
}
}
cout << "后缀表达式的值为" << OPND.top();
return OPND.top();
}
int main()
{
calculate();
system("pause");
return 0;
}
利用,作为两个数字之间的分割号。怎么在输入中直接读取空格目前还没找到方法.
找到了:cin.get()可以带空格的字符串输入,一般的如cin都会在空格处停止读取字符,也就是只会读取空格前的字符;