表达式求值

来源:互联网 发布:国产纪录片 知乎 编辑:程序博客网 时间:2024/06/04 19:59
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
int factor_value();
int term_value();
int expression_value();
int main()
{
    cout<<expression_value()<<endl;
    return 0;
}
int expression_value()
{
    int result=term_value();    //求第一项的值
    bool more=true;
    while(more)
    {
        char op=cin.peek();     // 看一个字符,不取走
        if(op=='+'||op=='-')
        {
            cin.get();        //从输入中取走一个字符
            int value=term_value();
            if(op=='+')
                result+=value;
            else
                result-=value;
        }
        else
            more=false;
    }
    return result;
}
int term_value()
{
    int result=factor_value();
    while(true)
    {
        char op=cin.peek();
        if(op=='*'||op=='/')
        {
            cin.get();
            int value=factor_value();
            if(op=='*')
                result*=value;
            else
                result/=value;
        }
        else
            break;
    }
    return result;
}
int factor_value()
{
    int result=0;
    char c=cin.peek();
    if(c=='(')
    {
        cin.get();
        result=expression_value();
        cin.get();
    }
    else
    {
        while(isdigit(c))
        {
            result=10*result+c-'0';
            cin.get();
            c=cin.peek();
        }
    }
    return result;
}
}
0 0