【栈的应用】表达式求值
表达式求值
前言
就在上一周,我对表达式求值死磕(差不多打了1000多行吧),但还是没做对,我只得死等到周六,去把这道题问我那位万能的盆友,在那位盆友的只支持2种符号(+,)的基础上扩了一点代码把它改为4则运算(+,-,,/)但是只有49行!
关于思路
这道题在网上有很多题解,而且都在200多行左右,虽然人家有注释但是这么多你想理解人家的思路吗?所以越精简越好.
网上,书上,通常会定义数字栈和字符栈 在此项目中也需要定义两个栈.此题也利用了c++的特性,在循环中直接输入cin>>a; (完整:while(cin>>a))
循环中如果是*,/直接运算,如果是+,-将字符入字符栈,数字栈入刚输入的数.最后定一个循环,如果现在字符栈是+则计算此值与下一个值的和,减法也同理。
代码
#include <iostream>
using namespace std;
int s[1001];
char b[1001];
int main()
{
int a,top=0,t=0;
char k;
cin>>a;
s[0]=a;
while(cin>>k)
{
cin>>a;
if(k=='*')
{
s[top]=s[top]*a;
}
else if(k=='/')
{
s[top]=s[top]/a;
}
else
{
top++;
s[top]=a;
}
if(k=='+'||k=='-')
{
t++;
b[t]=k;
}
}
t++;
for(;top>0;top--)
{
if(b[t]=='+')
s[top-1]=s[top]+s[top-1];
if(b[t]=='-')
s[top-1]=s[top]+s[top-1];
t--;
}
cout<<s[0];
return 0;
}
!!!使用代码注意:此代码运行输入完输入换行之后需输入两次ctrl+D换行才会有结果(输入输出流不用).