Qt 第7课、计算器字符串分离

计算器核心算法:

1、将中缀表达式进行数字运算符的分离
2、将中缀表达式转换成后缀表达式
3、通过后缀表达式计算最后的结果
在这里插入图片描述


一、计算器分离算法

计算器分离算法的意义在于把一串我们写成的算式字符串表达式进行数字和运算符的分离,主要难点在于如何区分正负号和加减号。

  • 满足以下几个特征都是正负号:
    1、+、- 号在表达式的第一个位置
    2、括号后面的+、- 号
    3、运算符后面的+、- 号
  • 算法的基本思路
    1、如果是数字或小数点,集合起来
    2、如果是运算符,把集合起来的字符串进队列;如果运算符是正负号,加上后面跟随的数字集合起来
    3、其余的运算符直接进队列
    4、剩下的数字进队列
    在这里插入图片描述
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])&&(isOperator(pre)||isLeft(pre)||pre == ""))
            {
                num += exp[i];
            }
            else
            {
                ret.enqueue(exp[i]);
            }
            pre = exp[i];
        }
    }
    if(!num.isEmpty())
    {
        ret.enqueue(num);
    }
    return ret;
}
QCalculatorDec::QCalculatorDec()
{
    m_exp = "";
    m_result = "";
    
    QQueue<QString> str;

    str = split("9 + (-3 - 1) * 5 + 1)");
    
    for(int i = 0; i < str.length(); i++)
    {
        qDebug() << str[i];
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值