⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expre.cpp

📁 C++描述的数据结构内容,在C++builder的环境中运行,这是第一部分
💻 CPP
字号:
//表达式求值expre.cpp
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<malloc.h>
#include<conio.h>

#define EOFILE '`'
typedef char Status;
typedef char SElemType;
#include "stack.cpp"
char OP[10]={'+','-','*','/','(',')','#'};
int precede[7][7]={
      1,1,2,2,2,1,1,
      1,1,2,2,2,1,1,
      1,1,1,1,2,1,1,
      1,1,1,1,2,1,1,
      2,2,2,2,2,3,0,
      1,1,1,1,0,1,1,
      2,2,2,2,2,0,3};

int In(char c,char *op)
{ int i=0;
  while(i<7)
    if(c==op[i++]) return 1;
  return 0;
}
char Precede(char op,char c)
{ int pos_op;
  int pos_c;
  int i;
  for(i=0;i<7;i++)
    { if(op==OP[i]) pos_op=i;
      if(c==OP[i]) pos_c=i;
    }
  switch(precede[pos_op][pos_c])
    { case 1:  return '>';
      case 2:  return '<';
      case 3:  return '=';
    }
 return 'A';
}
char Operate(int a,char theta,int b)
{ switch(theta)
    { case '+':return a+b-'0';
      case '-':return a-b+'0';
      case '*':return (a-'0')*(b-'0')+'0';
      case '/':return (a-'0')/(b-'0')+'0';
    }
 return 'A';
}
char EvaluateExpression()
{ SqStack *OPND,*OPTR;
  char c,x,theta;
  char a,b;
  OPTR->InitStack(&OPTR);
  OPTR->Push('#');
  OPND->InitStack(&OPND);
  c=getchar();
  while(c!='#'||OPTR->GetTop()!='#')
    {if(!In(c,OP))
      {OPND->Push(c);c=getchar();}
     else
      switch(Precede(OPTR->GetTop(),c))
	{case '<':
	   OPTR->Push(c);
	   c=getchar();break;
	 case '=':
	   OPTR->Pop(&x);
	   c=getchar();break;
	 case '>':
	   OPTR->Pop(&theta);
	   OPND->Pop(&b);OPND->Pop(&a);
	   OPND->Push(Operate(a,theta,b));
	   break;
       }
    }
  c=OPND->GetTop();
  OPTR->DestroyStack();
  OPND->DestroyStack();
  return c;
}
main()
{ char i;
  printf("expre.cpp运行结果:\n");
  printf("范围[0,9],输入以#号结束:");
  i=EvaluateExpression();
  cout<<"\n表达式的值是:";
  cout<<i-'0'<<endl;
  getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -