完成表达式求值函数(程序填空)

完成bool In(char ch); char Precede(char theta1, char theta2); char Operate(char first, char theta, char second);三个函数,使算法实现正确的表达式求值功能。

【样例输入】

3*(7-2)#

【样例输出】

15

#include
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef char ElemType;
typedef int Status;
const char oper[7] = { '+', '-', '*', '/', '(', ')', '#' };
//顺序栈结构体声明
typedef struct SqStack{
    ElemType *base;
    int stacksize; //栈可用的最大空间
    ElemType *top;
}SqStack;
/*基本操作声明部分*/
Status InitStack(SqStack &S); //顺序栈初始化
Status Push(SqStack &S, ElemType e); //进栈
Status Pop(SqStack &S, ElemType &e); //出栈
ElemType GetTop(SqStack S); //取栈顶元素

bool In(char ch) {
    //请完成判断ch是否为运算符    
}//In
/*判定栈顶元素与读入运算符之间优先关系*/
char Precede(char theta1, char theta2) {
    //请完成判断运算符优先级
}//Precede
char Operate(char first, char theta, char second) {
    //请完成计算两数运算结果
}//Operate

/*求值函数*/
ElemType EvaluateExpression( ) {
  SqStack OPTR,OPND;
  char ch,theta,a,b,x;
  InitStack (OPTR);  
  Push (OPTR,'#') ;
  InitStack (OPND);
  cin>>ch;
  while(ch!= '#' || GetTop(OPTR)!='#') {
    if (! In(ch)){
        Push(OPND,ch); 
        cin>>ch; 
    }  // ch不是运算符则进栈
    else
      switch (Precede(GetTop(OPTR),ch)) { //比较优先权
        case '<' :    //当前字符ch压入OPTR栈,读入下一字符ch
              Push(OPTR, ch);  
              cin>>ch;  
              break;
        case '>' :    //弹出OPTR栈顶的运算符运算,并将运算结果入栈
              Pop(OPTR, theta);
              Pop(OPND, b);  
              Pop(OPND, a);
              Push(OPND, Operate(a, theta, b)); 
              break;
        case '=' :    //脱括号并接收下一字符
              Pop(OPTR,x);    
              cin>>ch;   
              break;
        } // switch
  } // while
  return GetTop(OPND);} // EvaluateExpression

int main(){
    ElemType result=EvaluateExpression();
    cout<48<0;
}
Status InitStack(SqStack &S){
    S.base=new ElemType[MAXSIZE];
    if(!S.base) return OVERFLOW;
    S.stacksize=MAXSIZE;
    S.top=S.base;
    return OK;
}
Status Push(SqStack &S, ElemType e){
    if(S.top-S.base==S.stacksize) return ERROR;
    *S.top=e;
    S.top++; //*S.top++=e;
    return OK;
}
Status Pop(SqStack &S, ElemType &e){
    if(S.top==S.base) return ERROR;
    S.top--; //S.top=S.top-1;
    e=*S.top;  //e=*--S.top;
    return OK;
}
ElemType GetTop(SqStack S){
    ElemType e;
    if(S.top==S.base) return ERROR;
    e=*(S.top-1);  
    return e;
}

算法答疑---递归实现表达式求值_weixin_30634661的博客-CSDN博客 算法答疑---递归实现表达式求值一、总结一句话总结:表达式求值除了日常的栈做法,也可以用递归。1、递归的核心是什么?递推公式和边界条件递推公式就是递归的逻辑,有时候不一定方便写出来2、c++中int factor();形式的代码是做什么用的?函数声明,c++中的函数声明是有带函数返回值的,也就是最前面那个int。 1 #include<i... https://blog.csdn.net/weixin_30634661/article/details/98821501?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%AE%8C%E6%88%90%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC%E5%87%BD%E6%95%B0%EF%BC%88%E7%A8%8B%E5%BA%8F%E5%A1%AB%E7%A9%BA%EF%BC%89&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-98821501.nonecase&spm=1018.2226.3001.4187