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

📄 我的表达式.cpp

📁 表达式求值
💻 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 + -