1.分离算法
将中缀表达式进行数字和运算符的分离
以符号作为标志对表达式中的字符逐个访问
- 初始累计变量num为空,遍历字符串每个字符
- 若遇到数字或小数点(即当前符号是数字的一部分),累加到num变量,并用pre变量记录当前符号(用来判断正负号)
- 若遇到其它符号(+, -, *, / , ( , ) ,+, -)
- 遍历结束后若num不为空,入队列(遍历的最后一个字符是数字还没机会入队列)
QQueue<QString> QCalculatorDec::split(const QString& exp) { QQueue<QString> ret; QString num = ""; QString pre = ""; for(int i=0; i<exp.length(); i++) { if( isDigitOrDot(exp[i]) ) { num += exp[i]; pre = exp[i]; } else if( isSymbol(exp[i]) ) { if( !num.isEmpty() ) { ret.enqueue(num); num.clear(); } if( isSign(exp[i]) && ((pre == "") || (pre == "(") || isOperator(pre)) ) { num += exp[i]; } else { ret.enqueue(exp[i]); } pre = exp[i]; } } if( !num.isEmpty() ) { ret.enqueue(num); } return ret; }
区分正负号和加减号准则:正负号 + 和 - 在表达式的第一个位置、括号后的 + 和 - 、运算符后的 + 和 -
原文:https://www.cnblogs.com/chuancyworld/p/14966199.html