Qt解析四则运算表达式

利用Qt的QString和QStringList进行的简单的表达式解析,不带括号,可以是小数。

double MainWindow::calculate(QString str)
{
    //利用递归去掉所有的加号
    if(str.indexOf("+") != -1)
    {
        int i=str.indexOf("+");
        return calculate(str.left(i))+calculate(str.right(str.length()-1-i));
    }

    //去掉减号
    if(str.indexOf("-") != -1)
    {
        QStringList list = str.split('-');
        double value = calculate(list[0]);
        if(str.at(0) == "-")
            value = -value;
        for(int i=1; icount(); ++i)
        {
            value -= calculate(list[i]);
        }
        return value;
    }

    //去掉乘号
    if(str.indexOf("*") != -1)
    {
        int i=str.indexOf("*");
        return calculate(str.left(i))*calculate(str.right(str.length()-1-i));
    }

    //去掉除号
    if(str.indexOf("/") != -1)
    {
        QStringList list = str.split('/');
        double value = calculate(list[0]);
        for(int i=1; icount(); ++i)
        {
            value /= calculate(list[i]);
        }
        return value;
    }

    return str.toDouble();
}

你可能感兴趣的:(算法)