欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

表达式求值

程序员文章站 2022-03-31 19:45:26
...
#include<iostream>
#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();
    while(true)
    {
        //看第一个字符  不取走
        char op = cin.peek();
        if(op=='+'||op=='-')
        {
            //把符号取走
            cin.get();
            //获得下一项的值
            int value = term_value();
            if(op=='-')
            result -= value;
            if(op=='+')
            result += value;
        }
        //如果下一项没有 则退出 循环 查找下一个
        else
        break;
    }
    return result;
}
//求一项的值
int term_value()
{
    int result = factor_value();
    while(true)
    {
        char op = cin.peek();
        if(op=='*'||op=='/')
        {
            cin.get();
	 		int value = factor_value();  	//下一因子的值保存在value上 
	 		if(op == '*')
	 			result *= value;
	 		else
	 			result	/= value;
        }
        else
        {
            break;
        }
    }
    return result;
}
//q求因子的值
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;
}