从C ++中的字符串计算算术表达式 [英] Evaluating arithmetic expressions from string in C++

查看:114
本文介绍了从C ++中的字符串计算算术表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一个简单的方法来评估一个简单的数学表达式从字符串,如下:

I'm searching for a simple way to evaluate a simple math expression from an string, like this:


3 * 2 + 4 * 1 +(4 + 9)* 6

3*2+4*1+(4+9)*6

我只想要 + * 操作加 * 的优先级高于 +

I just want + and * operations plus ( and ) signs. And * has more priority than +.

推荐答案

我想你正在寻找一个简单的递归下降解析器

I think you're looking for a simple recursive descent parser.

下面是一个非常简单的例子:

Here's a very simple example:

const char * expressionToParse = "3*2+4*1+(4+9)*6";

char peek()
{
    return *expressionToParse;
}

char get()
{
    return *expressionToParse++;
}

int expression();

int number()
{
    int result = get() - '0';
    while (peek() >= '0' && peek() <= '9')
    {
        result = 10*result + get() - '0';
    }
    return result;
}

int factor()
{
    if (peek() >= '0' && peek() <= '9')
        return number();
    else if (peek() == '(')
    {
        get(); // '('
        int result = expression();
        get(); // ')'
        return result;
    }
    else if (peek() == '-')
    {
        get();
        return -factor();
    }
    return 0; // error
}

int term()
{
    int result = factor();
    while (peek() == '*' || peek() == '/')
        if (get() == '*')
            result *= factor();
        else
            result /= factor();
    return result;
}

int expression()
{
    int result = term();
    while (peek() == '+' || peek() == '-')
        if (get() == '+')
            result += term();
        else
            result -= term();
    return result;
}

int _tmain(int argc, _TCHAR* argv[])
{

    int result = expression();

    return 0;
}

这篇关于从C ++中的字符串计算算术表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆