#include"SqStack.h"
#include <iostream>
using namespace std;
bool In(char e)
{
/***********Begin*************/
if(e=='+'||e=='-'||e=='*'||e=='/'||e=='('||e==')'||e=='#')
return true;//是
else
return false;//不是
/***********End*************/
}
char Precede(char a, char b)
{
/***********Begin*************/
char f;
if(a=='+'||a=='-')
{
if(b=='+'||b=='-'||b==')'||b=='#')
f='>';
else if(b=='*'||b=='/'||b=='(')
f='<';
}
else if(a=='*'||a=='/')
{
if(b=='+'||b=='-'||b=='*'||b=='/'||b==')'||b=='#')
f='>';
else if(b=='(')
f='<';
}
else if(a=='(')
{
if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')
f='<';
else if(b==')')
f='=';
}
else if(a==')')
{
if(b=='+'||b=='-'||b=='*'||b=='/'||b==')'||b=='#')
f='>';
}
else if(a=='#')
{
if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')
f='<';
else if(b=='#')
f='=';
}
return f;
/***********End*************/
}
char Operate(int i,char theta,int j)
{
/***********Begin*************/
int result;
switch(theta) {
case '+': result = i + j; break;
case '-': result = i - j; break;
case '*': result = i * j; break;
case '/': result = i / j; break;
}
return result;
/***********End*************/
}
char EvaluateExpression()
{
/***********Begin*************/
sqStack OPND,OPTR;
int ch;
char a,b,theta,x;
InitStack(OPND);
InitStack(OPTR);
Push(OPTR,'#');
ch=getchar();
while(ch!='#'||GetTop(OPTR)!='#')
{
if(!In(ch))
{
ch=ch-48;
Push(OPND,ch);
ch=getchar();
}
else
{
switch(Precede(GetTop(OPTR),ch))
{
case '<':
Push(OPTR,ch);
ch=getchar();
break;
case '>':
Pop(OPTR,theta);
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
case '=':
Pop(OPTR,x);
ch=getchar();
break;
}
}
}
return GetTop(OPND);
/***********End*************/
}
int main()
{
printf("%d",EvaluateExpression());
return 0;
}
第3关:表达式求值
最新推荐文章于 2024-10-09 22:28:58 发布