简单四则运算计算器的C++实现(含括号和+-*/的优先级判断)

本文分享了如何使用C++实现一个简单的四则运算计算器,包括括号处理和运算符的优先级判断。通过参照《数据结构》书中关于栈的内容,详细介绍了计算过程,并提供了代码示例。
摘要由CSDN通过智能技术生成

抽空实现了一下严蔚敏的《数据结构》一书中的带优先级的计算器,感觉还是有些收获,特此分享一下^_^;

原理

请参照《严蔚敏:数据结构 第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
     *********************
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值