计算器c++实现

1.中缀表达式转后缀表达式
<colorscheme colors="#ffffff,#000000,#1c1c1c,#333399,#00e4a8,#ffcf01,#ff0000,#3333cc"></colorscheme>
中缀:a/(b-c)+d*e
后缀: abc-/de*+
转换步骤:
(1)从左到右扫描中缀表达式,遇到#转(6);
(2)遇到操作数直接输出;(不进栈)
(3)遇到“)”,则连续出栈输出,直到遇到“(”为止(“(”出栈但不输出);否则
(4)若是其它操作符,则与栈顶的操作符比较优先级;若优先级小于栈顶的优先级,如a*b+c,说明*号所需的两个数a和b已经输出,则把*号弹出,如此反复,直到栈外优先级比栈内优先级高,最后把+号进栈.若优先级大于栈顶优先级,如a+b*c,说明*号所需的两个数b和c还有一个没有输出,所以把*号进栈.
(5)转(1);
(6)输出栈中剩余操作符(#除外)。

2.转换的关键:确定操作符的优先级
优先级决定操作符是进栈或出栈。
操作符在栈内外的优先级应该不同,以体现中缀表达式同优先级操作符从左到右的计算要求。“(”的优先级在栈外最高,但进栈后应该比除#外的操作符低,便于括号内的其它操作符进栈。
isp——栈内优先级
icp——栈外优先级
操作符 # ( */ +- )
icp 0 7 4 2 1
isp 0 1 5 3 7




你可能感兴趣的:(C++,c,C#)