#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <stack>
using namespace std;
int cmp(char x,char y)
{
int m,n;
switch(x)
{
case '(':
m=0;
break;
case '+':
case '-':
m=1;
break;
case '*':
case '/':
m=2;
break;
default:
break;
}
switch(y)
{
case '+':
case '-':
n=1;
break;
case '*':
case '/':
n=2;
break;
case '(':
n=3;
break;
default:
break;
}
if(m>=n)
return 1;
else
return 0;
}
void computer(char post[])
{
stack<int> s;
int i=0;
int a,b,n;
while(post[i]!='#')
{
switch(post[i])
{
case '+':
a=s.top();
s.pop();
b=s.top();
s.pop();
n=a+b;
s.push(n);
printf("%d\n",n);
break;
case '-':
a=s.top();
s.pop();
b=s.top();
s.pop();
n=b-a;
s.push(n);
printf("%d\n",n);
break;
case '*':
a=s.top();
s.pop();
b=s.top();
s.pop();
n=a*b;
s.push(n);
printf("%d\n",n);
break;
case '/':
a=s.top();
s.pop();
b=s.top();
s.pop();
n=b/a;
s.push(n);
break;
default:
s.push(post[i]-'0');
break;
}
i++;
}
n=s.top();
printf("%d\n",n);
}
int main()
{
int i=0,j=0;
int len;
char pre[20],post[20];
char ch;
stack<int> s;
scanf("%s",&pre);
len=strlen(pre);
s.push('#');
for(i=0;i<len;i++)
{
if(pre[i]>='0'&&pre[i]<='9')
post[j++]=pre[i];
else if(pre[i]==')')
{
while(!s.empty())
{
ch=s.top();
if(ch=='(')
{
s.pop();
break;
}
else
{
post[j++]=ch;
s.pop();
}
}
}
else if(pre[i]=='#')
{
while(!s.empty())
{
post[j++]=s.top();
s.pop();
}
break;
}
else
{
if(s.top()!='#')
{
while(!s.empty())
{
ch=s.top();
//printf("%c\n",ch);
if(cmp(ch,pre[i])==1)
{
post[j++]=ch;
s.pop();
}
else
{
s.push(pre[i]);
break;
}
}
}
else
s.push(pre[i]);
}
}
computer(post);
for(i=0;i<j;i++)
printf("%c",post[i]);
printf("\n");
return 0;
}
表达式求值
最新推荐文章于 2021-03-25 22:40:27 发布