解题思路:
问题描述:
输入由整型分量和操作符组成的中缀表达式,输出其后缀表达式和运算的结果。整型分量:十进制数。操作符:( , ) , + , - , * , / 。
如输入3*(5-8/2)+7,输出 3 5 8 2 / - * 7 +,结果是10;
输入3-(1/4+7)*3 ,输出 3 1 4 / 7 + 3 * -,结果是 -18.75;
输入3*4/5*(5-7)+4,输出 3 4 * 5 / 5 7 - * 4 +,结果是-0.8。
注意:输入的运算分量为十进制数,输出可能是小数。
问题分析:
中缀表达式难以直接求值,要通过转化为其后缀表达式计算。转化和求值过程都需要借助STL的STACK来实现。
转化:
1)顺序扫描中缀表达式,
当遇到一个左括号时立即将其压栈;
当遇到对应的右括号时,将栈中的操作符弹出并输出,直到遇到左括号。最后再弹出左括号(但不输出);
当遇到一个分量时,立即输出;
当遇到一个操作符时,将它与栈顶操作符比较:
<1>如果它比栈顶的操作符优先级高,或者它是左括号后的第一个操作符,则将其压入栈;
<2>否则(低或相等),将栈顶操作符弹出并输出;
<3>继续比较,如果它比新的栈顶操作符的优先级高,跳到 2),否则,重复<