Qt学习

12_计算器核心解析算法(上)

2018-01-19  本文已影响12人  编程半岛

声明:此文章仅是本人在学习狄泰QT实验分析课程所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

1. 问题:计算机如何读懂四则运算表达式?

后缀表达式

2. 中缀表达式VS后缀表达式

人类习惯的数学表达式为中缀表达式,另外还有一种将运算符放在数字后面后缀表达式

中缀表达式转换为后缀表达式

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]) && ((pre == "") || (pre == "(") || (isOperator(pre))) )
            {
                num += exp[i];
            }
            else
            {
                ret.enqueue(exp[i]);
            }

            pre = exp[i];
        }
    }

    if( !num.isEmpty() )
    {
        ret.enqueue(num);
    }

    return ret;
}

5. 小结

上一篇 下一篇

猜你喜欢

热点阅读