Σ(|||▽||| )
而我还在这找bug,
≥﹏≤
好在是最后终于成功了 啊 哈哈哈!!!
(๑><๑)
注意操作数只能是一位数哦!!!!
输入表达式时要切换成英文括号哦!!!
这里实用的栈是数组构成,就不像书上那样什么 抽象数据类型定义了 的啦
#include <iostream>
using namespace std;
#define MAXSIZE 50
char EvaluateExpression(); //表达式求值
bool In(char ch); //判断输入字符ch是否为运算符
char Precede(char a,char b); //比较优先级
char Operate(char a,char opera,char b); //二元运算
int main()
{
int a=EvaluateExpression();
cout<<a;
return 0;
}
char EvaluateExpression() //表达式求值
{
int a,b,c;
char ch;
int i=-1,j=-1;//栈的计数器
char OPND[MAXSIZE];//操作数栈
char OPTR[MAXSIZE];//操作符栈
cout<<"请输入计算公式:"<<endl<<"例如格式为a*(b+c)="<<endl;
cin>>ch;
OPTR[++i]='=';
while(ch!='='||OPTR[i]!='=') //仅当ch为'='并且栈OPTR中只有'='时停止循环
{
if(!In(ch)) //如果不是操作符
{
OPND[++j]=ch;
cin>>ch;
}
else
switch(Precede(OPTR[i],ch))
{
case '<':
OPTR[++i]=ch;
cin>>ch;
break;
case '>':
b=OPND[j--]; //OPND出栈
a=OPND[j--]; //OPND出栈
c=Operate(a,OPTR[i--],b); //OPTR出栈参与a与b的运算
OPND[++j]=c;
break;
case '=':
i--; //OPTR出栈
cin>>ch;
break;
}
}
return (OPND[j]-48);
}
bool In(char ch)//判断输入字符ch是否为运算符
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')'||ch=='=')
return true;
else
return false;
}
char Precede(char a,char b) //比较优先级
{
if(a=='('&&b==')' || a=='='&&b=='=')
return '=';
else if(a=='('||a=='='||b=='(' || (a=='+'||a=='-')&&(b=='*'||b=='/'))
return '<';
else
return '>';
}
char Operate(char a,char opera,char b) //二元运算
{
switch(opera)
{
case '+':
return (a-'0')+(b-'0')+48;
case '-':
return (a-'0')-(b-'0')+48;
case '*':
return (a-'0')*(b-'0')+48;
case '/':
return (a-'0')/(b-'0')+48;
}
}
马上要考概率论了,祝自己好运๑乛◡乛๑