#include"StdAfx.h"
#include <iostream>
#include<stack>
using namespace std;
stack<int>sdata;
stack<char>soper;
int isoper(char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
return 1;
else
return 0;
}
char percede(char s,char c)
{
switch(s)
{
case'+':
case'-':
{
if(c=='+'||c=='-')
return '>';
else if(c=='*'||c=='/')
return '<';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;
case'*':
case'/':
{
if(c=='+'||c=='-')
return '>';
else if(c=='*'||c=='/')
return '>';
else if(c=='(')
return '<';
else if(c==')')
return '>';
else
return '>';
}
break;
case'(':
{
if(c==')')
return '=';
else
return '<';
}
break;
case')':
{
return '>';
}
break;
case'#':
{
if(c=='#')
return '=';
else
return '<';
}
break;
}
}
int operater(int x,char op,int y)
{
int s;
switch(op)
{
case'+':
s=x+y;
break;
case'-':
s=x-y;
break;
case'*':
s=x*y;
break;
case'/':
s=x/y;
break;
}
return s;
}
int main()
{
int a,b,result,i;
char ch,thre;
sdata.empty();
soper.empty();
soper.push('#');
ch=getchar();
while(ch!='#' || soper.top()!='#')
{
if(!isoper(ch))
{
i=atoi(&ch);
ch=getchar();
while(!isoper(ch))
{
i=i*10+atoi(&ch);
ch=getchar();
}
sdata.push(i);
}
else
{
switch(percede(soper.top(),ch))
{
case'<':
{
soper.push(ch);
ch=getchar();
}
break;
case'=':
{
thre=soper.top();
soper.pop();
ch=getchar();
}
break;
case'>':
{
thre=soper.top();
soper.pop();
b=sdata.top();
sdata.pop();
a=sdata.top();
sdata.pop();
result=operater(a,thre,b);
sdata.push(result);
}
break;
}
}
}
cout<<result<<endl;
// system("pause");
return 0;
}
栈实现计算器
最新推荐文章于 2024-02-05 20:27:48 发布