Qt 第8课、计算器括号匹配算法

文章介绍了计算器的核心算法,包括将中缀表达式转换为后缀表达式以进行计算,以及使用栈来实现括号匹配的算法。通过遍历表达式,对左括号进栈,遇到右括号时检查栈顶是否为左括号来确保匹配。最后,展示了代码示例用于检测括号匹配情况。
摘要由CSDN通过智能技术生成

计算器核心算法:

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


二、计算器括号匹配算法

计算器括号匹配算法的意义在于判断你输入的表达式里面的左右括号是否匹配

  • 算法的基本思路
    1、如果是左括号,直接进栈
    2、如果是右括号且栈顶为左括号,栈顶元素 pop()
    3、如果是右括号且栈顶不是左括号,报错
    运行完栈里面还有东西,直接报错
//括号匹配算法
bool QCalculatorDec::match(QQueue<QString>& exp)
{
    bool ret = true;
    QStack<QString> stack;
    stack.clear();

    for(int i = 0; i < exp.length(); i++)
    {
        if(isLeft(exp[i]))
        {
            stack.push(exp[i]);
        }
        else if(isRight(exp[i]))
        {
            if(!stack.isEmpty() && isLeft(stack.top()))
            {
                stack.pop();
            }
            else
            {
                ret = false;
                break;
            }
        }
    }

    if(!stack.isEmpty())
    {
        ret = false;
    }

    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];
    }

    qDebug() << match(str);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值