呃,代码写得很差,就不贴了
主要是利用栈来实现
而具体有几个要注意的地方:
- 输入格式控制,如何将输入的数字字符串(如:123、123.456……)存放到对应的元素里面,我使用的是istringstream(后面也是根据这个来的),是这次才发现的好东西,用法和cin差不多但是可以用自己的字符串进行输入(这样的话可以使用得更广),至于输入是否正确,是否截止则分别用其方法:fail()、eof()来判断.
- 如何将中缀表达式转换成后缀表达式,方法如下(虽然给出,但建议搜百度):1、检测左括号。如无则退回原字符,如有则brankets入栈,opStack入栈。2、输入数字(如果使用了istringstream会很简单)。如成功则将之入sufExp并检测右括号,如无则退回原字符,如有则将opStack中配对的左括号之间的全部入sufExp。如失败则表示非法中缀表达式。3、输入运算符。如成功(是运算符之一,而且能够成合法表达式)则将之入opStack(入opStack的时候要注意其优先级和结合性)。4、输入未结束则继续循环。
- 计算后缀表达式的值倒是比较简单,但是要注意返回值的类型(如果你打算做整数模式的话,我的意思是保留整除的性质,当然,如果这样前面构建的时候也得注意一下)。