问题描述
输入包含+、-、*、/、圆括号和正整数组成的中缀表达式,以“@”作为表达式结束符,计算该表达式的运算结果。
算法实现
思路:建立两个栈,一个存放运算符,一个存放运算数。依次读入每个字符串,如果为数字,则直接入栈;如果为运算符,则与字符串栈顶字符比较优先级:若栈顶字符<当前字符,则当前字符入栈并读下一字符,若栈顶字符=当前字符,则仅栈顶字符出栈并读下一字符,若栈顶字符>当前字符,则栈顶字符出栈且运算数栈出两个数字进行计算,计算结果入运算数栈(不读下一字符)。最后当运算符栈为空且运算数栈仅剩一个数字时,该数字为表达式值。
表达式求值-以@为输入结束符运算符优先级采用二维数组存储,采用字符‘>’,‘<’,‘=’标示。(二维数组初始化方法)
运算符优先级比较函数 运算结果计算函数思考1:若以回车符结束与上述有何不同?
回车符替换结束符将@进栈、运算符优先级等处换成10或\n,其他代码保持不变。
思考2:如何实现处理10以上数字的运算?
读10以外的运算数遇到一个数字字符,则循环读取数字字符,直到下一个字符为运算符为止。
网友评论