#include<iostream>
#include<string>
#include<stack>
using namespace std;
const int MAX_SIZE = 100;
//栈
stack<int>OPND;//数据栈
stack<int>OPTR;//操作栈
char q[7]={'+','-','*','/','(',')','='};//操作符
char p[7][7]={'>','>','<','<','<','>','>',//运算的优先顺序
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','#',' ',
'>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','#',};
//判断字符与数字
bool Ins(char ch)
{
if(ch>='0'&&ch<='9')
return true;
return false;
}
//转化数字
int getnum(char ch)
{
if(ch>='0'&&ch<='9')
{
return ch-'0';
}
return -1;
}
//比较字符串的关系
char compare(char x,char ch)
{
int i=0,j=0;//记录字符的下标位置
while(x!=q[i])i++;
while(ch!=q[j])j++;
return p[i][j];
}
//数的计算
int Operate(int a,char oper,int b)
{
int ans=0;
switch(oper)
{
case '+':ans=a+b;break;
case '-':ans=a-b;break;
case '*':ans=a*b;break;
case '/':if(b!=0)ans=a/b;
else cout<<"除数不为0"<<endl;
}
return ans;
}
int EvaluateExpression()
{
char ch=getchar();//获得字符
int a,b;char oper;//存取中间值
OPTR.push('=');//在操作符中存放结束标志字符‘=’
while(ch!='='||OPTR.top()!='=')
{
if(Ins(ch))
{
OPND.push(getnum(ch));//数字入栈
ch=getchar();
}
else
{
switch(compare(OPTR.top(),ch))
{
case '<':OPTR.push(ch);ch=getchar();break;
case '#':OPTR.pop();ch=getchar();break;
case '>':b=OPND.top();OPND.pop();a=OPND.top();OPND.pop();
oper=OPTR.top();OPTR.pop();OPND.push(Operate(a,oper,b));break;
}
}//else
}//while
return OPND.top();
}
int main()
{
cout<<EvaluateExpression()<<endl;
system("pause");
}
简单栈应用-表达式求值
最新推荐文章于 2023-04-10 20:52:59 发布