一、效果展示
如图1所示,是简单的四则运算测试效果,第一列为原始表达式,第二列为转换后的后缀表达式,冒号后为结果。表达式支持负数和空格,图中是使用了5组测试数据,测试结果可能不全,如大家发现算法有问题,可留言,谢谢。
图1 四则运算展示
测试代码如下
1 void lineedit::CalculateExpression() 2 { 3 QString reExp("1 + 2.3 * (23 + 3)"); 4 QString res = change(reExp);//0 1 - 2.3 23 3 + * + 5 6 QString reExp2("1*(-3)+2*(3+3)"); 7 QString res2 = change(reExp2); 8 9 QString reExp3("2*-3+-2.1*(3+3)"); 10 repairExpress(reExp3); 11 QString res3 = change(reExp3); 12 13 QString reExp4("2*(-3)+-2.1*(3+3)"); 14 repairExpress(reExp4); 15 QString res4 = change(reExp4); 16 17 QString reExp5("2*(0-(1.1-3)*3)+-2.1*(3+3)"); 18 repairExpress(reExp5); 19 QString res5 = change(reExp5); 20 21 qDebug() << reExp << '\t'<< res << ":" << CalExp(res.split(' ', QString::SkipEmptyParts)); 22 qDebug() << reExp2 << '\t'<< res2 << ":" << CalExp(res2.split(' ', QString::SkipEmptyParts)); 23 qDebug() << reExp3 << '\t'<< res3 << ":" << CalExp(res3.split(' ', QString::SkipEmptyParts)); 24 qDebug() << reExp4 << '\t'<< res4 << ":" << CalExp(res4.split(' ', QString::SkipEmptyParts)); 25 qDebug() << reExp5 << '\t'<< res5 << ":" << CalExp(res5.split(' ', QString::SkipEmptyParts)); 26 }