中缀转后缀思想:
运算符的优先级:
运算符 | 级别(数字越大优先级越高) |
---|---|
( | 1 |
+、- | 2 |
*、/ | 3 |
) | 4 |
扫描字符串,如果字符串是0~9的数字,添加到结果字符串中,如果是运算符,则进行一下判断:(运算符栈mvstack,结果字符串res)
- 如果运算符是‘+’、‘-’,‘*’,‘/’,
mvstack为空,直接加进栈内,
mvstack不为空。将栈内所有比带加入运算符的等级低或相等的运算符一个一个出栈 加入到结果字符串res中。然后将带加入字符串入栈 - 如果运算符是‘(’,直接入mystack。
- 如果运算符是‘)’。mvstack栈中一个一个输出运算符‘(’前面所有的运算符,加入到结果字符串res中。‘(’和‘)’不入栈,也不入运算符字符串。
- 最后输出栈中所有剩余字符串。
eg:1+2*(9-3)+6/2
初始化:string res=“”;stack<char> mvstack;string str=“1+2*(9-3)+6/2”;
str[0]=1,res=1
str[1]=+,mvs