中缀表达式转后缀表达式并输出计算结果

2023-12-26 21:48

本文主要是介绍中缀表达式转后缀表达式并输出计算结果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   后缀表达式又称逆波兰表达式,明显的特点是:逆波兰表达式中没有括号,计算时将操作符之前的第一个数作为右操作数,第二个数作为左操作数,进行计算,得到的值继续放入逆波兰表达式中。
   但日常生活中我们总是习惯于写中缀表达式,所以需要先将中缀表达式转为后缀表达式。
   假如中缀表达式为:12*(3+4)-6+8/2
   在遇到数字时,我们直接输出,遇到符号,则入栈。但在入栈时,我们要判断栈内已有的操作符的优先级和需要判断的操作符的优先级的大小。
   栈内<栈外:入栈操作符
   栈内>栈外:出栈操作符
   栈内=栈外:出栈 栈内的操作符并入栈 栈外的操作,
   遇到 ‘(’:直接入栈
   遇到 ‘)’:出栈所有操作符直达遇到 ‘(’
   因为第一个操作符进入时也需要比较,所以在创建出保存操作符的栈时,直接就入栈一个’#’,别的字符也行,只要是非操作符就行,并将其优先级设为”1”,其他操作设为更低的”-1”。
   优先级:
   0–>’#’;
   1–>’(‘;
   2–>’+’;
   2–>’-‘;
   3–>’*’;
   3–>’/’;
   4–>’)’;
   其他情况下优先级均为’-1’。但是我们在判断优先级时,因为’(‘的优先级为’1’,比较小,所以判断时要先判断是否为’(‘,是的话直接入栈,我们可以用if,else if,else完成。
   具体代码实现如下:
  


#include <iostream>
#include <stack>
#include <math.h>
using namespace std;bool Number(char ch)//判断是否为数字,是则返回true
{if (ch >= 48 && ch <= 57)return true;elsereturn false;
}void InPut(char*& str)//接收输入的中缀表达式的函数,并简单判断是否合法
{cout << "Please Enter What You Want To calculation:" << endl;while (1){cin >> str;if (Number(str[0]))//中缀表达

这篇关于中缀表达式转后缀表达式并输出计算结果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540894

相关文章

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin