中缀表达式求值(利用递归)

输入为四则运算表达式,仅由数字、+、-、*、/、(、)组成,没有空格,要求求其值。假设运算符结果都是整数。“/”结果也是整数。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int expression_value();//读入表达式,返回其值
int factor_value();//读入一个因子,并且返回其值
int term_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();//看一个字符,不取走。cin会从输入流里面拿走
        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;
}

中缀表达式求值(利用递归)