如果该运算符的优先级低于运算符栈顶部运算符,则将运算符栈顶部的运算符出栈,从操作数栈中弹出两个操作数,计算结果后再入栈 operandStack ,重复此步骤直到运算符栈为空或遇到优先级高于或等于该运算符的栈顶运算符为止...如果是右括号“)”,则将运算符栈栈顶的运算符出栈,从操作数栈中弹出两个操作数计算结果,重复此步骤直到遇到左括号为止,并将这一对括号从运算符栈中移除。
重复步骤3和4,直到表达式的最右端。...将运算符栈中剩余的所有运算符依次出栈,从操作数栈中弹出两个操作数,计算结果后入栈 operandStack。
操作数栈最终只剩一个操作数,这就是表达式的计算结果。...官方API
实际上微软官方在 System.Data 库中 DataTable.Compute(String, String)方法实现了计算表达式,代码如下
using System;
using System.Data...想了很久的方案,突然想到之前看数据结构的书的时候,提到过栈在表达式求值中的应用,翻书看了一下,还是被这个实现方案惊艳到了,所以,还是需要多读多看多思考,才能在面对各种需求游刃有余,加油~