calculator.cpp

来自「一个关于算式表达式求值的课程设计」· C++ 代码 · 共 99 行

CPP
99
字号


#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 + =
减小字号Ctrl + -
显示快捷键?