使用栈来实现一个简单的计算器,可以遵循以下步骤:
定义栈数据结构
使用两个栈,一个用于存储操作数(`numStack`),另一个用于存储运算符(`opStack`)。
判断运算符的优先级
编写一个函数`priority(char op)`,用于返回运算符的优先级。例如,乘法和除法的优先级高于加法和减法。
计算两个操作数的结果
编写一个函数`calculate(int num1, int num2, char op)`,根据运算符计算两个操作数的结果。
处理中缀表达式
遍历输入的中缀表达式字符串,对每个字符进行判断:
如果是数字,则直接压入`numStack`。
如果是运算符,则比较其与`opStack`栈顶运算符的优先级:
如果当前运算符优先级小于或等于栈顶运算符,则从`numStack`中弹出两个数,与栈顶运算符计算结果后压入`numStack`,然后将当前运算符压入`opStack`。
如果当前运算符优先级大于栈顶运算符,则直接将当前运算符压入`opStack`。
遍历结束后,从`numStack`中依次弹出元素,得到最终的计算结果。
处理带括号的表达式
如果表达式中包含括号,需要先计算括号内的部分,再将结果与外部运算符结合。这可以通过在遇到左括号时压入一个特殊标记,遇到右括号时计算括号内的表达式并弹出标记来实现。
输出结果
将最终的计算结果输出到控制台。