一、功能实现:
输入正常的中缀表达式,通过程序实现转化成后缀表达式,并且输出结果。
二、思路分析:
1. 输入:三个示例
2+4x6-8/2+5
2+(3x4)-5+1
3+(11)*2-62. 分析:
2.1 从左边开始读取,读到数字直接输出不入栈,读到运算符入栈,入栈之前判断前面的运算符是否比它的优先级高,如果比它高就入栈,如果比它低或者相等的优先级,就先让栈顶的运算符出栈,然后再入栈。
2.2 带括号的情况:当读取到 ( 符时,不管前面是什么运算符,直接入栈,然后没遇到 ) 符之前都是按上面正常运算,直到 ) 符时,)不用入栈然后直接出栈两个,第一个是运算符,第二个是 ( 符,然后直到栈为空。
2.3 整数10以上:定义一个LEN记录int OPER= 0;标识, 读取到 ( 符号时打开标识OPER =1 ,LEN开始记录len++;,读到 ) 符号时,OPER关闭OPER =0;之后得到LEN长度,比如:(11) -> 2,就是前面2个是一坨数据,然后就很长的一段计算,代码中有这里就不扯。
三、思路图:
四、代码实现:
#include <iostream>
#include <sstream>
using namespace std;
static int IDX = 0; //压栈用
static int NUM_LEN = 0; //查括号中的数字大小
static stringstream ss;
static string RESULT