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

📄 calculator.cpp

📁 一个关于算式表达式求值的课程设计
💻 CPP
字号:


#include <cstdlib>
#include "Calculator.h"

Calculator_T::Calculator_T(void):s()
{
	//空
}

Calculator_T::Calculator_T(const char *p):s(p)
{
	//空
}

Calculator_T::Calculator_T( Run_T&rhs):s(rhs)
{
	//空
}

Calculator_T::~Calculator_T(void)
{
	//空
}

Calculator_T& Calculator_T::operator =( Calculator_T&rhs)
{
	if(this!=&rhs)
	{
		this->s=rhs.s;
	}

	return *this;
}

void Calculator_T::getOperator(double&x,double&y)
{
	if(result.empty())
		throw MissingOperator;
	else 
	{
		x=*result.begin();
		result.erase(result.begin());
	}
	if(result.empty())
		throw MissingOperator;
	else
	{
		y=*result.begin();
		result.erase(result.begin());
	}
}

void Calculator_T::doOperator(char op)
{
	double x,y;
	getOperator(x,y);

	switch(op)
	{
	case '+':result.insert(result.begin(),(y+x));break;
	case '-':result.insert(result.begin(),(y-x));break;
	case '*':result.insert(result.begin(),(y*x));break;
	case '/':if(x==0.0)  throw DivideByZero;
		else result.insert(result.begin(),(y/x));break;
	default:break;
	}
}

void Calculator_T::eval(void)
{
	char c;
	vector<char> expression;

	s.in_to_post(expression);

	vector<char>::iterator p=expression.begin();

	result.erase(result.begin(),result.end());

	while(*p!='#')
	{
		switch(*p)
		{
		case '+':
		case '-':
		case '*':
		case '/':doOperator(*p);break;
		default:c=*p,result.insert(result.begin(),atof(&c));break;
		}
		p++;
	}

	if(!result.empty())
		cout<<"结果为:"<<*result.begin()<<endl;
}


⌨️ 快捷键说明

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