返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中怎么将中缀表达式转换为后缀表达式
  • 206
分享到

C++中怎么将中缀表达式转换为后缀表达式

2023-06-05 13:06:57 206人浏览 薄情痞子
摘要

本篇文章为大家展示了c++中怎么将中缀表达式转换为后缀表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、思路:和中缀表达式的计算类似,只不过不用计算,把表达式输出即可用字符数组存储整行输入的中

本篇文章为大家展示了c++中怎么将中缀表达式转换为后缀表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、思路:和中缀表达式的计算类似,只不过不用计算,把表达式输出即可

用字符数组存储整行输入的中缀表达式;

接着从字符数组的0位置开始判断字符,如果是数字,那就要判断后面是否是数字,如果是就不断扫描组成一个整数

(暂不考虑负数和小数),最终组成一个整数,然后输出这个数(因为不用计算,所以直接输出即可);

如果是左括号,直接进符号栈;

如果是操作运算符,与符号栈的栈顶元素比较优先级:如果高就压入栈;

低,就取出符号栈顶的元素输出;

接着,再判断符号栈顶的元素和当前的运算符号继续比较优先级,重复前面步骤,直到栈空或者当前的符号优先级高;

如果是右括号,把符号栈栈顶的元素取出,如果不是左括号,把取出的运算符输出,接着取符号栈栈顶的元素,直到符号栈中取出的符号是左括号;

当扫描完字符数组时,判断符号栈是否为空:

不为空,把符号栈栈顶的元素取出,输出到窗口,直到符号栈为空。

二、实现程序:

 // 中缀表达式转后缀表达式// 操作符:+、-、*、/、%// 输入:可以用cin.getline(arr, 250)或者cin.get(ch) && ch != '\n'// 测试数据:输入格式:(注意:不能有中文的操作符)//      2+(3+4)*5//      16+2*30/4//   输出格式://     2 3 4 + 5 * +//     16 2 30 * 4 / +  #include #include   // 判断是否是操作符bool isOperator(char ch) {  if(ch == '+' || ch == '-' || ch == '*' || ch == '/')    return true;  return false; // 否则返回false}  // 获取优先级int getPriority(char ch) {  int level = 0; // 优先级     switch(ch) {    case '(':      level = 1;      break;    case '+':    case '-':      level = 2;      break;    case '*':    case '/':      level = 3;      break;    default:      break;  }  return level;}  int main(int arGC, const char * argv[]) {  // insert code here...  int num;  char arr[250]; // 一个一个的读取表达式,直到遇到'\0'  std::stack op; // 栈op:存储操作符     while(1) {    std::cin.getline(arr,250);    int len, i;    char c; // c存储从栈中取出的操作符         len = (int)strlen(arr); // strlen()输出的是:unsigned long类型,所以要强制转换为int类型    i = 0;    while(i < len) {      if(isdigit(arr[i])) { // 如果是数字        num = 0;        do {          num = num * 10 + (arr[i] - '0'); // ch - 48根据ASCAII码,字符与数字之间的转换关系          i++; // 下一个字符        }while(isdigit(arr[i]));        std::cout << num << " ";      } else if(arr[i] == '(') { // (:左括号        op.push(arr[i]);        i++;      } else if(isOperator(arr[i])) { // 操作符        if(op.empty()) {// 如果栈空,直接压入栈          op.push(arr[i]);          i++;        }        else {          // 比较栈op顶的操作符与ch的优先级          // 如果ch的优先级高,则直接压入栈          // 否则,推出栈中的操作符,直到操作符小于ch的优先级,或者遇到(,或者栈已空          while(!op.empty()) {            c = op.top();            if(getPriority(arr[i]) <= getPriority(c)) {              // 优先级低或等于              std::cout << c << " ";              op.pop();            } else // ch优先级高于栈中操作符              break;          } // while结束          op.push(arr[i]); // 防止不断的推出操作符,最后空栈了;或者ch优先级高了          i++;        } // else      } else if(arr[i] == ')') { // 如果是右括号,一直推出栈中操作符,直到遇到左括号(        while(op.top() != '(') {          std::cout << op.top() << " ";          op.pop();        }        op.pop(); // 把左括号(推出栈        i++;      } else // 如果是空白符,就进行下一个字符的处理        i++;    } // 第二个while结束    while(!op.empty()) { // 当栈不空,继续输出操作符      std::cout << op.top() << " ";      op.pop();    }    std::cout << std::endl;    flush(std::cout);  } // 第一个while结束  return 0;}

运行结果:
C++中怎么将中缀表达式转换为后缀表达式

上述内容就是C++中怎么将中缀表达式转换为后缀表达式,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网其他教程频道。

--结束END--

本文标题: C++中怎么将中缀表达式转换为后缀表达式

本文链接: https://lsjlt.com/news/243029.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中怎么将中缀表达式转换为后缀表达式
    本篇文章为大家展示了C++中怎么将中缀表达式转换为后缀表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、思路:和中缀表达式的计算类似,只不过不用计算,把表达式输出即可用字符数组存储整行输入的中...
    99+
    2023-06-05
  • C++实现中缀表达式转化为后缀表达式详解
    目录1.题目描述2.输入输出3.解题思路4.样例解析 5.代码实现5.1.优先级确认5.2.转换函数1.题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运...
    99+
    2024-04-02
  • C++如何实现中缀表达式转化为后缀表达式
    这篇文章将为大家详细讲解有关C++如何实现中缀表达式转化为后缀表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象...
    99+
    2023-06-29
  • Java中缀表达式转后缀表达式流程详解
    目录一、栈1、栈的基本介绍2、栈的底层实现二、中缀表达式转后缀表达式1、拆解中缀表达式2、中缀转后缀的算法3、中缀转后缀代码解析4、对后缀表达式进行计算一、栈 1、栈的基本介绍 栈是...
    99+
    2024-04-02
  • 如何理解前缀,后缀,中缀表达式转化求值问题
    这篇文章主要讲解了“如何理解前缀,后缀,中缀表达式转化求值问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解前缀,后缀,中缀表达式转化求值问题”吧!...
    99+
    2024-04-02
  • C++ 如何使用栈求解中缀、后缀表达式的值
    目录1. 前言2. 中缀表达式2.1 求值流程2.2 演示表达式4*6^(3+3*3-2*3)-8 的求值过程当2.3 编码实现3.后缀表达式4. 中缀转后缀表达式4.1 流程演示4...
    99+
    2022-11-13
    C++中缀 后缀表达式的值 C++ 栈求解表达式的值
  • 后缀表达式的java如何实现
    这篇“后缀表达式的java如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“后缀表达式的java如何实现”文章吧。中缀表...
    99+
    2023-07-02
  • 详解Java中缀表达式的实现
    目录1.概念2.算法流程3 代码实现1.概念 什么是中缀表达式,什么是后缀表达式 从小学开始学习的四则运算,例如:3+(5*(2+3)+7) 类似这种表达式就是中缀表达式。中缀表达式...
    99+
    2024-04-02
  • 带你了解Java数据结构和算法之前缀,中缀和后缀表达式
    目录1、人如何解析算术表达式①、求值 3+4-5②、求值 3+4*52、计算机如何解析算术表达式3、后缀表达式①、如何将中缀表达式转换为后缀表达式?一、先自定义一个栈二、前缀表达式转...
    99+
    2024-04-02
  • C#怎么利用后缀表达式解析计算字符串公式
    本篇内容介绍了“C#怎么利用后缀表达式解析计算字符串公式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当我们拿到一个字符串比如:20+31*...
    99+
    2023-07-05
  • C#利用后缀表达式解析计算字符串公式
    目录实现简单的数字的加减乘除1、解析公式转为节点信息2、转为后缀表达式3、计算后缀表达式当我们拿到一个字符串比如:20+31*(100+1)的时候用口算就能算出结果为3151,因为这...
    99+
    2023-02-23
    C#解析计算字符串公式 C#解析字符串公式 C#解析字符串 C# 后缀表达式
  • Java数据结构和算法之前缀、中缀和后缀表达式的示例分析
    小编给大家分享一下Java数据结构和算法之前缀、中缀和后缀表达式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、人如何解析算术表达式如何解析算术表达式?或者换种说法,遇到某个算术表达式,我们是如何计算的:①、求...
    99+
    2023-06-28
  • 关于后缀表达式的java实现过程
    目录中缀表示法java实现后缀表示法逆波兰表达式的计算方式与中缀记法的转换java后缀表达式的计算实现方法示例代码实现中缀表示法java实现 观察一个普通的算式:3+4*5 我们当然...
    99+
    2024-04-02
  • Java 中执行动态表达式语句前中后缀Ognl、SpEL、Groovy、Jexl3
    目录Ognl、SpEL、Groovy、Jexl3一、前中后缀简单描述1、前缀、中缀、后缀表达式(逆波兰表达式)2、中缀表达式3、后缀表达式4、前缀表达式二、OGNL三、SpEL四、J...
    99+
    2024-04-02
  • C++中的Lambda表达式及表达式语句
    目录一、概念二、左值与右值三、类型转换四、操作符五、思考1、思考下面x变量是左值还是右值,有什么特性?2、思考一下以下赋值操作符的原始代码是怎样的?3、思考以下代码做了什么事情?一、...
    99+
    2024-04-02
  • 怎么在python中利用后缀表达式实现一个计算器功能
    本文章向大家介绍怎么在python中利用后缀表达式实现一个计算器功能的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。前缀表达式运算符在数字的前面1 + (2 + 3) * 4 - 5 (中缀)- + 1 * + ...
    99+
    2023-06-06
  • Golang栈结构和后缀表达式实现计算器示例
    目录引言问题中缀、后缀表达式的计算人利用中缀表达式计算值计算机利用后缀表达式计算值计算后缀表达式的代码实现中缀表达式转后缀表达式转换过程转换的代码实现总结引言 只进行基本的四则运算,...
    99+
    2024-04-02
  • 怎么用C#表达式树Expression动态创建表达式
    本篇内容介绍了“怎么用C#表达式树Expression动态创建表达式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在一些管理后台中,对数据进...
    99+
    2023-06-22
  • C#中的Lambda表达式怎么优化
    本篇内容介绍了“C#中的Lambda表达式怎么优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用Lambda表达式将会造成Lambda表...
    99+
    2023-06-17
  • c#中查询表达式GroupBy怎么用
    这篇文章主要介绍c#中查询表达式GroupBy怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实验基础数据用例:Student类:public class Student  ...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作