如图1所示,是简单的四则运算测试效果,第一列为原始表达式,第二列为转换后的后缀表达式,冒号后为结果。表达式支持负数和空格,图中是使用了5组测试数据,测试结果可能不全,如大家发现算法有问题,可留言,谢谢。
图1 四则运算展示
二、一些小技巧
在网上找了很多四则运算帖子,讲的都挺不错,思路很清晰,可是很少有拿来直接能用的,并且大多数的都不支持负数运算,既然是四则运算当然需要支持负数运算了,在这里我们只需要使用一点儿小技巧即可。
1、针对负号进行字符串修复 例如:-1*-3+2*(3+3) -> (0-1)*(0-3)+2*(3+3)。
1 //针对负号进行字符串修复 例如:-1*-3+2*(3+3) -> (0-1)*(0-3)+2*(3+3) 2 void repairExpress(QString & express) 3 { 4 bool repair = false; 5 int lpos = -1, rpos = -1; 6 QString result; 7 for(int i = 0; i < express.size(); ++i) 8 { 9 QChar c = express[i]; 10 if (c == '+' || c == '-' || c == '*' || c == '/')//出现符号时记录 11 { 12 if (repair) 13 { 14 result.append(')'); 15 lpos = -1; 16 repair = false; 17 } 18 19 if (c == '-'&& 20 (i == 0 || lpos != -1 && lpos == i - 1)) 21 { 22 result.append('('); 23 repair = true; 24 } 25 26 lpos = i; 27 } 28 29 result.append(c); 30 } 31 32 express = result; 33 }