首页 > 编程语言 > 详细

QT-计算器核心解析算法

时间:2021-07-03 15:37:10      阅读:28      评论:0      收藏:0      [点我收藏+]

1.分离算法

将中缀表达式进行数字和运算符的分离

以符号作为标志对表达式中的字符逐个访问

- 初始累计变量num为空,遍历字符串每个字符

- 若遇到数字或小数点(即当前符号是数字的一部分),累加到num变量,并用pre变量记录当前符号(用来判断正负号)

- 若遇到其它符号(+, -, *, / , ( , ) ,+, -)

  1.  先看num变量,若有值,num的值放入队列,清空num
  2. 若为正负号,累计到num变量(流程能走到这说明num无值)
  3.  否则当前字符(即运算符或括号)入队列
  4. 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;
}

区分正负号和加减号准则:正负号 + 和 - 在表达式的第一个位置、括号后的 + 和 - 、运算符后的 + 和 -

 

QT-计算器核心解析算法

原文:https://www.cnblogs.com/chuancyworld/p/14966199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!