后缀表达式求值
课上只是了解了思路 ,代码没要求,我自个写了写,发现有细节问题处理不好,
就是 str为数字的时候 例如 16 9 4 3 + * -
先1输入,再输6 ,问题是循环结束的条件,i<str.size()
我是一个一个输的 是不是str.size()=1,显然不是,但是str.size()是输入的全部的字符的长度;
那么9怎么输入 ,9前面是空格啊
后来发现了,每次输入的都是str,string类型,不读空格 ,。。。。。。。
#include<iostream>
#include<stack>
#define N 110
using namespace std;
int main()
{
string str;
stack<int> s;
int n1,n2;
while(cin>>str)
{
if(str=="+")
{
n1=s.top();
s.pop();
n2=s.top();
s.pop();
if(s.empty())
{
cout<<n2+n1;
break;
}
s.push(n2+n1);
}
else if(str=="-")
{
n1=s.top();
s.pop();
n2=s.top();
s.pop();
if(s.empty())
{
cout<<n2-n1;
break;
}
s.push(n2-n1);
}
else if(str=="/")
{
n1=s.top();
s.pop();
n2=s.top();
s.pop();
if(s.empty())
{
cout<<n2/n1;
break;
}
s.push(n2/n1);
}
else if(str=="*")
{
n1=s.top();
s.pop();
n2=s.top();
s.pop();
if(s.empty())
{
cout<<n2*n1;
break;
}
s.push(n2*n1);
}
else
{
int num=0;
for(int i=0;i<str.size();i++)
{
num*=10;
num+=str[i]-'0';
}
s.push(num);
}
}
return 0;
}