📄 我的表达式.cpp
字号:
#include<stdio.h>
#include<iostream>
#include<malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
char op[7]={'+','-','*','/','(',')','#'};
char oppr[7][7]={
'>','>','<','<','<','>','>',
'>','>','<','<','<','>','>',
'>','>','>','>','<','>','>',
'>','>','>','>','<','>','>',
'<','<','<','<','<','=',' ',
'>','>','>','>',' ','>','>',
'<','<','<','<','<',' ','='};
typedef struct{
char *base;
char *top;
int stacksize;
}sqstack;
char Initstack(sqstack &s){
s.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
if(!s.base) return 0;
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}
char pop(sqstack &s,char &e){
if(s.top==s.base) return 0;
e=*--s.top;
return e;
}
char push(sqstack &s,char e){
if(s.top-s.base>=s.stacksize){
s.base=(char*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(char));
if(!s.base) return 0;
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top--=e;
return 1;
}
char gettop(sqstack &s,char &e){
if(s.top==s.base) return 0;
e=*(s.top-1);
return e;
}
int In(char c,char op[7]){
for(int i=0;i<7;i++)
if(c==op[i])
return 1;
else
return 0;
}
int precede(char x1,char x2){
for(int i=0;i<7;i++)
if(x1==op[i])
for(int j=0;j<7;j++)
if(x2==op[j])
return oppr[i][j];
}
int operate(char a,char theta,char b){
int val;
if(theta='+')
val=a+b;
else if(theta='-')
val=a-b;
else if(theta='*')
val=a*b;
else if(theta='/')
val=a/b;
else
return 0;
return val;
}
int EvaluateExpression(){
char e;
sqstack OPTR,OPND;char c;
Initstack(OPTR);push(OPTR,'#');
Initstack(OPND);c=getchar();
while(c!='#'||gettop(OPTR,e)!='#'){
if(!In(c,op)){push(OPND,c);c=getchar();}
else
switch(precede(gettop(OPTR,e),c)){
case'<':
push(OPTR,c);c=getchar();
break;
case'=':
char x;
pop(OPTR,x);c=getchar();
break;
case'>':
char a,b;char theta;
pop(OPTR,theta);
pop(OPND,b);pop(OPND,a);
push(OPND,operate(a,theta,b));
break;
}
}
return gettop(OPND,e);
}
int main(){
char result;
result=EvaluateExpression();
printf("%d",result);
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -