# 计算式处理脚本 **Repository Path**: gyjchonga/calculation-formula-processing ## Basic Information - **Project Name**: 计算式处理脚本 - **Description**: 能够处理简单的包括加减乘除,包含(但不包括嵌套)小括号的四种运算的计算式,并支持使用代数式进行计算 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-03 - **Last Updated**: 2021-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 计算式处理脚本 #### 介绍 能够处理简单的包括加减乘除,包含(但不包括嵌套)小括号的四种运算的计算式,并支持使用代数式进行计算 脚本功能: 可以处理形如: a=1; b=2; c=a+b; aa=a+(b+c)*4/5-3; 的运算式 并返回a、b、c、aa四个变量的最终计算结果 实现方式: 0、建立Tree结构,其中存放flag来标志是运算符节点还是操作数节点,value来保存节点内容,以及三个指针left、right、father; 1、利用map来对每个变量的值进行存储; 2、词法分析,将每个运算符以及运算符之间的操作数提取出来,并全部放入堆栈中(如果遇到了左括号,则可以将括号内的内容看作是一个新的运算式,进行递归); 3、由于栈内必然是一个操作数紧接一个运算符,因此可以两两视为一组,先将栈内节点组合成一个计算顺序未必正确的二叉树,再根据四则运算符的优先级高低,可以发现,如果父子节点为同优先级,则不需要更换其位置,如果子节点的优先级低于根节点,则需要找到距离子节点位置最远的根节点(寻找的过程中所有的根节点必须都是同优先级且高于子节点的,因此可以在第一次发现一个乘除运算节点时,就将其位置记录下来)的位置,并将其进行易位; 4、通过第3步的操作,可以得到一个符合数学计算顺序的二叉树,对其进行后序递归,计算每个子树的数值,最后返回根节点计算结果。