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

📄 enavuate.h

📁 用栈、顺序表实现四则运算
💻 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 + -