抽空实现了一下严蔚敏的《数据结构》一书中的带优先级的计算器,感觉还是有些收获,特此分享一下^_^;
原理
请参照《严蔚敏:数据结构 第4版》栈相关章节,下面是其计算过程的简单演示;
算数运算符在压栈和出栈时的优先关系(图片源自网格);
代码
一、计算器Demo
// main.cpp
#include "Calculator.h"
int main(int argc, char *agrv[])
{
CCalculator cc;
cout << "/\n"\
<< "// Hello, Dear User! Welcome to Calculator! //\n"\
<< "// Tips: Calc - Input any Equation end by \"Enter\" //\n"\
<< "// Exit - exit //\n"\
<< "/\n"\
<< "Input your equation pls:\nUsr/> ";
string eq;
while (getline(std::cin, eq))
{
if (!eq.compare("exit"))
{
cout << "/\n"\
<< "// Goodbye! Dear User!!! //\n"\
<< "/\n";
break;
}
cout << "Sys/> "<< cc.CalcEquation(eq) << "\n\nUsr/> ";
}
return 0;
}
二、计算器类文件
// Calculator.h
#ifndef _CALCULATOR_H_
#define _CALCULATOR_H_
#include <stack>
#include <math.h>
#include <iostream>
#include <sstream>
using namespace std;
/***********************************************************************
类 描 述: CCalculator - 计算器类,对外提供等式计算接口,并返回计算结果,可重复
调用,计算不同等式;
编辑时间:2016/12/26
编 辑 者:Chirl
***********************************************************************/
class CCalculator
{
public:
CCalculator(void);
~CCalculator(void);
/***********************************************************************
函数功能:对传入的字符串等式进行求解。
输入参数:eq - 字符串格式的数学算式
输出参数:返回算式计算结果;
编辑时间:2016/12/28
编 辑 者:Chirl
***********************************************************************/
const float CalcEquation(string &eq);
private:
CCalculator(const CCalculator &c){}
void operator=(const CCalculator &c){}
/***********************************************************************
函数功能:对两个操作数lhs和rhs执行op算数操作。
输入参数:op必须为算数操作符(+、-、*、/)
rhs和lhs必须为同类型的值;
输出参数:返回两个数进行op算数运算后的结果;
编辑时间:2016/12/26
编 辑 者:Chirl
*********************