代码如下:
#include<bits/stdc++.h>
using namespace std;
char Compare(char a,char b)
{
if((a=='*')||(a=='/'))
{
if((b=='*')||(b=='/'))
{
return '=';
}
else if((b=='+')||(b=='-')||(b=='#'))
{
return '>';
}
}
else if((a=='+')||(a=='-'))
{
if((b=='*')||(b=='/'))
{
return '<';
}
else if((b=='+')||(b=='-'))
{
return '=';
}
else{
return '>';
}
}
else{
if(b!='#')
return '<';
else{
return '=';
}
}
}
int execute(int a,char c,int b)
{
if(c=='+')
return a+b;
else if(c=='-')
return a-b;
else if(c=='*')
return a*b;
else if(c=='/')
return a/b;
}
int evaluation()
{
set<char> opset;
opset.insert('+');
opset.insert('-');
opset.insert('*');
opset.insert('/');
opset.insert('#');
stack<char> optr;
stack<int> ovs;
optr.push('#');
printf("\n输入一个算式以#结尾\n");
char ch=getchar();
getchar();
while((ch!='#')||(optr.top()!='#'))
{
if(opset.find(ch)==opset.end()){
int n=(int)(ch-'0');
ovs.push(n);
ch=getchar();
getchar();
}
else{
switch(Compare(ch,optr.top()))
{
case '>':
optr.push(ch);
ch=getchar();
getchar();
break;
case '=':
case '<':
char sd=optr.top();
optr.pop();
int a=ovs.top();
ovs.pop();
int b=ovs.top();
ovs.pop();
int v=execute(b,sd,a);
ovs.push(v);
break;
}
}
}
int anwser=ovs.top();
return anwser;
}
int main()
{
int n=evaluation();
cout<<n<<endl;
}
运行结果如下:
大家可以把int改为double ,这个int是我的实验版。可能运算结果出现小数。
欢迎加q261542585学习交流。