进阶实验3-3.1-求前缀表达式的值-编程题
程序员文章站
2022-06-07 20:54:05
...
解题代码
#include<iostream>
#include<string>
#include<stack>
#include<stdio.h>
using namespace std;
int main()
{
stack<double> s;
string a[30];
int n = 0;
double temp, temp1, temp2;
bool flag = true;
while (cin >> a[n++]) {};
n--;
for (int i = n - 1; i >= 0; i--) {
if (a[i].length()==1 && (a[i][0] == '-' || a[i][0] == '+' || a[i][0] == '*' || a[i][0] == '/')) {
if (s.size() < 2) {
flag = false;
break;
}
temp1 = s.top(); s.pop();
temp2 = s.top(); s.pop();
if (temp2 == 0 && a[i][0] == '/') {
flag = false;
break;
}
switch (a[i][0]) {
case '+':temp = temp1 + temp2; s.push(temp); break;
case '-':temp = temp1 - temp2; s.push(temp); break;
case '*':temp = temp1 * temp2; s.push(temp); break;
case '/':temp = temp1 / temp2; s.push(temp); break;
}
}
else {
temp = stof(a[i]);
s.push(temp);
}
}
if (s.size() != 1) flag = false;
if (flag) printf("%.1f", s.top());
else cout << "ERROR";
return 0;
}
测试结果
问题整理
1.+1、-1也要当作数字处理。
2.非正常退出的三种情况:除数为零、操作数缺失、操作数有多余。