📄 enavuate.h
字号:
#ifndef ENAVUATE_H_H
#define ENAVUATE_H_H
#include "Priority.h"
int DefaultListSize=50;
class Enavuate
{
public:
bool In(char c){
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
return true;
return false;
}
char precede(char it,char c){
AList<priority> a(DefaultListSize);
int temp1,temp2;
priority b1('*',5,4);
priority b2('/',5,4);
priority b3('+',3,2);
priority b4('-',3,2);
priority b5('(',1,6);
priority b6(')',1,1);
priority b7('#',0,0);
a.append(b1);
a.append(b2);
a.append(b3);
a.append(b4);
a.append(b5);
a.append(b6);
a.append(b7);
for(a.setStart();a.rightLength()!=0;a.next()){
priority b(0,0,0);
a.getValue(b);
if(b.getOp()==it) temp1=b.getInStack();
if(b.getOp()==c) temp2=b.getOutStack();
}
if(temp1>temp2) return '>';
else if(temp1==temp2) return '=';
else return '<';
}
int Operate(int a,char Op,int b){
switch(Op)
{
case '+':return a+b;break;
case '-':return a-b;break;
case '*':return a*b;break;
case '/':return a/b;break;
default: return 0;break;
}
}
int EvaluateExpression(){
AStack<char> Optr(DefaultListSize);
AStack<int> Opnd(DefaultListSize);
Optr.push('#');
char c=getchar();
char it,Op,item;
int a,b,d;
bool temp=false;
while(!(c=='#'&&it=='#')){
if(!In(c)){
if(temp==true){
Opnd.pop(a);
a=a*10;
c=c-48;
c+=a;
}
else c-=48;
Opnd.push(c);
c=getchar();
temp=true;
}
else{
if(temp==false&&c=='-') Opnd.push(0);
Optr.topValue(it);
switch(precede(it,c))
{
case '<':Optr.push(c);c=getchar();break;
case '=':Optr.pop(item);c=getchar();break;
case '>':
Optr.pop(Op);
Opnd.pop(b);
Opnd.pop(d);
Opnd.push(Operate(d,Op,b));break;
}
temp=false;
}
Optr.topValue(it);
Opnd.topValue(d);
}
return d;
}
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -