首页 > 其他分享 >表达式计算,递归的思路,表达式本身的定义就是递归

表达式计算,递归的思路,表达式本身的定义就是递归

时间:2024-10-14 19:46:48浏览次数:19  
标签:定义 递归 int cin value result 缓冲区 表达式 op

#include<iostream>
using namespace std;
int factor_value();
int term_value();
int expression_value();
int factor_value()//因子
{
    int result = 0;
    char op = cin.peek();//用op存储缓冲区第一个字符,但并不从键盘缓冲区取走
    if (op == '(')//看是不是括号
    {
        cin.get();//从缓冲区读走'('
        result = expression_value();//计算括号内的表达式
        cin.get();//从缓冲区读走')'
    }
    else
    {
        while (isdigit(op))//判断op是不是数字
        {
            cin.get();//从缓冲区拿走op的值
            result = result * 10 + op - '0';//这个用于将读取到的字符转化成整数
            op = cin.peek();//继续看缓冲区的第一个字符
        }
    }
    return result;
}
int term_value()//项
{
    int result = factor_value();
    bool more = true;//判断还没有其他的项
    while (more)
    {
        char op = cin.peek();//看接下来的第一个字符是不是乘号或者除号
        if (op == '*' || op == '/')
        {
            cin.get();//从键盘缓冲区取出op的字符
            int temp = factor_value();
            if (op == '*')
            {
                result *= temp;
            }
            else if (op == '/')
            {
                result /= temp;
            }
        }
        else
        {
            more = false;
        }
    }
    return result;
}
int expression_value()//表达式
{
    int result = term_value();//获取一项的值
    bool more = true;//判断还没有其他的项
    while (more)
    {
        char op = cin.peek();//看接下来的第一个字符是不是加号或者减号
        if (op == '+' || op == '-')
        {
            cin.get();//从键盘缓冲区取出op的字符
            int temp = term_value();
            if (op == '+')
            {
                result += temp;
            }
            else if (op == '-')
            {
                result -= temp;
            }
        }
        else
        {
            more = false;
        }
    }
    return result;
}
int main()
{
    cout << expression_value() << endl;
    return 0;
}

//函数cin.peek()用于从键盘缓冲区看第一个字符,但并不会取走第一个字符
//函数cin.get()用于从键盘缓冲区读走第一个字符,会取走第一个字符

标签:定义,递归,int,cin,value,result,缓冲区,表达式,op
From: https://blog.csdn.net/2401_84219815/article/details/142927170

相关文章