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

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

时间:2024-10-14 19:46:48浏览次数:3  
标签:定义 递归 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

相关文章

  • (nice!!!)(LeetCode) 1884. 鸡蛋掉落-两枚鸡蛋(动态规划 dfs递归和递推 || 数学)
    题目:1884.鸡蛋掉落-两枚鸡蛋方法一:动态规划dp+递归dfs+记忆化搜索。时间复杂度0(n^2)。C++版本:classSolution{public: //状态sta[i]表示:i层找到f所需要的最小操作次数intsta[1010];inttwoEggDrop(intn){ //层数为0时,直接返回0if(n==0......
  • 任务类型和字段自定义,支撑个性化业务管理
    一句话介绍任务类型和任务字段自定义,面向企业内部不同业务部门,在管理各自任务的时候有不同信息管理差异的场景。企业根据自己的任务管理需求,自定义任务类型,配置不同的任务字段,解决差异化的任务管理场景。应用场景某互联网企业,企业内部有研发部,有销售部研发部通常需要管理以下......
  • Python - 正则表达式转义注意事项
    无论哪种语言,在使用正则表达式的时候都避免不了一个问题,就是在匹配元字符的时候,需要对元字符进行转义,让正则表达式引擎将其当做普通字符来匹配。本文主要以python为例,说明一下转义中需要注意的问题。python的正则表达式中需要转义的元字符有以下几个:.^$*+?\\[]|{}()......
  • 【转】netcore 下的 C# 表达式求值
    转自:https://www.cnblogs.com/surfsky/p/12918566.html需求场景:表达式为系统功能维护,提取后,将可执行的表达式放入NetCore下if(表达式)来判定是否正确,因维护的表达式为字符串类型,例如"2>1"需要实现if(2>1){//表达式正确逻辑}else{//表达式不成立逻辑} netframewo......
  • Bison遇到冲突的默认行为&用户自定义优先级
    Bison遇到冲突的默认行为&用户自定义优先级在使用Bison进行语法分析时,如果在语法规则中存在冲突,Bison会根据默认的优先级和结合性规则进行决策,选择某个特定的行为来解决冲突。Bison中常见的冲突主要包括两类:移入-规约冲突(shift-reduceconflict)规约-规约冲突(reduce-reduce......
  • 【vue+printJs】前端打印, 自定义字体大小, 自定义样式, 封装共享样式
    效果示例思维导图目录1,基本使用1,依赖下载2,页面导入3,修改字体大小(可行但不推荐)2,自定义样式,字体大小1,修改字体大小(推荐)2,自定义样式3,封装共享样式3,去除页面页脚内容4,测试案例demo,直接cv可用5,print-js的其他参数说明1,基本使用1,依......
  • C语言——自定义类型
    目录一、结构体        1、结构体的定义与声明        2、结构体变量的定义和初始化        3、结构体的自引用         4、结构体的内存对齐         5、为什么要结构体的内存对齐                1、性能......
  • MySql数据库---存储过程(带in、out、inout参数,),变量定义,if,case判断,循环结构,游标,handler
    思维导图 存储过程概念MySQL5.0版本开始支持存储过程。简单的说,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,类似Python中的函数;存储过就是数据库SQL语言层面的代码封装与重用入门案例语法:delimiter自定义结束......
  • [java/spring/web] 深入理解:Spring @ExceptionHandler => 自定义应用异常处理器(Appli
    1概述:Spring@ExceptionHandler∈spring-web作用ExceptionHandler是Spring框架(spring-web模块)提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以......
  • Java——数组的定义与使用
    各位看官:如果您觉得这篇文章对您有帮助的话欢迎您分享给更多人哦感谢大家的点赞收藏评论,感谢您的支持!!!一:数组的概念以及定义,初始化1.1:数组概念以及定义数组概念:可以看成是相同类型元素的一个集合。数组定义:三种方法T[]数组名=newT[N];例如:int[]a......