C++:将表达式构建为二叉树实现一个简单计算器

用c++实现一个计算器,支持整数、小数的加减乘除四则运算,允许表达式中出现括号。这里默认输入数据均为格式正常表达式,结果精确到小数点后三位。具体解释详见代码注释。

#include <iostream>
#include <list>
#include <sstream>
#include <iomanip>
using namespace std;

struct Token {  // 一个简单的结构体,成员只有一个字符串,用来储存数值或符号
    string text;
    Token(string text) : text(text) {}
    double doubleValue() {  // 将string类型转化为double类型
        stringstream ss(text);
        double value;
        ss >> value;
        return value;
    }
};

class Parser {

    struct Tree {      // 二叉树
        Token token;   // 储存数值或符号
        Tree * left;   // 指向左子树的指针
        Tree * right;  // 指向右子树的指针

        Tree(Token token) : token(token) {
            left = 0;
            right = 0;
        }
        ~Tree() {
            if (left != 0) delete left;
            if (right != 0) delete right;
        }
    };

    Tree * expression;  // 指向表达式二叉树的指针
    double result;      // 整个表达式的计算结果

    static double execute(Tree * expression) {  // 计算表达式的值
        if (expression->left == 0) {   // 左子树为空时,token储存的是当前子树的值
            return expression->token.doubleValue();
        } else {   // 左右子树均存在,分别计算左右子树的值,再
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值