C++实现 逆波兰表达式计算问题
C++实现 逆波兰表达式计算问题
#include <iostream> #include <string> using namespace std; class Stack { private:int size;int top;float *listArray; public:Stack(int sz=20);~Stack();bool push(float it);//入栈bool pop(float& it);//出栈bool isEmpty();//判断栈是否为空bool isOne();//判断栈里是否一个元素 }; Stack::Stack(int sz) //栈构造函数 {size=sz;top=0;listArray=new float[size]; } bool Stack::push(float it) {if(top==size)return false;listArray[top++]=it;return true; } bool Stack::pop(float& it) {if(top==0)return false;it=listArray[--top];return true; } bool Stack::isEmpty() //判断站是否为空 {if(top==0)return true;return false; } bool Stack::isOne() {if(top==1)return true;return false; } Stack::~Stack() {delete listArray; } //此函数传进输入的字符串,并对字符串进//行扫描并进行相应处理,得到结果(函数声//明) void compute(char* str); int main() {char str[20];cin.getline(str,20,'#');compute(str);return 0; } //此函数传进输入的字符串,并对字符串进//行扫描并进行相应处理,得到结果(函数体) void compute(char* str) {Stack aStack;float x=0,y=0,s1,s2,temp;int i;i=0;while(str[i]){switch(str[i]){case '+': //加法运算if(aStack.isOne()||aStack.isEmpty()) {cout << "表达式不符合要求";return;}aStack.pop(s1);aStack.pop(s2);x=s2+s1;aStack.push(x);x=0;i++;break;case '-': //减法运算if(aStack.isOne()||aStack.isEmpty()) { cout << "表达式不符合要求";return;}aStack.pop(s1); aStack.pop(s2);x=s2-s1; aStack.push(x);x=0;i++;break;case '*': //乘法运算if(aStack.isOne()||aStack.isEmpty()) {cout << "表达式不符合要求";return;}aStack.pop(s1); aStack.pop(s2);x=s2*s1;aStack.push(x);x=0;i++;break;case '/': //除法运算if(aStack.isOne()||aStack.isEmpty()){cout << "表达式不符合要求";return;}aStack.pop(s1);aStack.pop(s2);if(s1==0){cout << "分母为0!" << endl;return;}x=s2/s1;aStack.push(x);x=0;i++;break;case ' ': //如果是空格,将数据x押入栈中if(str[i-1]>=48&&str[i-1]<=57) aStack.push(x);x=0;i++;y=0;break;case '.': //获得小数部分temp=10.0;while(str[++i]!=' ') {if(str[i]>=48&&str[i]<=57) y=y+(str[i]-48)/temp;temp*=10;}x+=y;break;default: //将字符数字转换为浮点型的数字if(str[i]>=48&&str[i]<=57) {x=x*10+str[i]-48;i++;}}} //判断栈是否只有切仅有一个元素,是就输//出结果 if(aStack.isOne()) {aStack.pop(x);cout << str << '=' << x << endl;} }
C++实现 逆波兰表达式计算问题相关推荐
- Java逆波兰表达式计算
后缀表达式(逆波兰表达式) 运算符位于操作数之后 从左至右扫描表达式,遇到数字遇到数字时,将数字压栈,遇到运算符时,弹出栈顶的两个元素,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈, ...
- C语言实现逆波兰表达式计算函数(含浮点型、整型混合运算)
基本实现思路: (1)逆波兰表达式运算: 按顺序遍历整个表达式 ,若遇到操作数,则入栈,若遇到操作符,则连续弹出两个操作数(有序)进行运算,并将结果压入栈中,当栈中只剩下一个操作数时,为最终运算结果. ...
- 程序员笔记逆波兰表达式计算
//纯数组模拟栈实现(推荐) class Solution { public static int evalRPN(String[] tokens) { int[] ...
- 数据结构:后缀表达式(逆波兰表达式)
逆波兰表达式计算 package com.atchina.stack;import java.util.ArrayList; import java.util.List; import java.ut ...
- Java 逆波兰表达式完成计算器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 三大表达式 一.中缀转后缀 二.逆波兰表达式计算 总结 三大表达式 前缀表达式 中缀表达式 :就是我们平时常见的表达式 对人来说 ...
- 栈应用-逆波兰表达式(CPP实现简单易懂图解)
栈应用-逆波兰表达式(后缀表达式) 逆波兰表达式定义: 在由运算符(operator)和操作数(operand)组成的表达式中不使用括号(parenthesis-free)即可表示带优先级的运算关系 ...
- 波兰表达式与逆波兰表达式
中缀表达式:(3+4)×5-6 波兰(前缀)表达式:- × + 3 4 5 6 逆波兰(后缀)表达式:3 4 + 5 × 6 - 波兰表达式计算规则: 1.找出"运算符.操作数.操作数&qu ...
- php逆波兰表达式,PHP实现逆波兰式 - 计算工资时用
近期一个小项目需要用到公式运算, 所以就进行一些了解,以下内容均属于个人经验. 在PHP中实现公式表达式四则运算大概有两种方法: 1)使用系统函数eval 2)将表达式转换成逆波兰表达式进行计算. / ...
- 逆波兰表达式的生成及计算
逆波兰表达式(后缀表达式)生成算法: (1)构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则. (2)读入一个用中缀表示法表示的简单算术表达式,为方便起见,认为地在字符串后面加入一个特殊字 ...
- 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)
题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...
最新文章
- 3dmax2021入门学习教程
- 【AngularJS】—— 4 表达式
- win10 看不到其它计算机,w10网上邻居搜索不到其它电脑怎么办
- Oracle Events事件
- Bash shell - 2
- 百度运营专家:互联网运营必读书目(实用推荐)
- 计算机应用头部案例提交,基于头部位置的应用程序放置的制作方法
- 智能运维监管系统终端_什么系统能实现机房智能运维?
- 【转】MS-DOS下怎样使用解压缩共具
- java http soap_在Spring中发布SOAP HTTP Webservice - Java杂家 - Blo...
- 15. (附加)链表中间节点(C++版本)
- Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic
- 分布式事务解决方案之可靠消息最终一致性
- 中兴捧月比赛DIJKSTRA派算法说明
- Learning optical flow from still images
- 使用Qt实现FTP客户端
- 中国AI独角兽新增一员:这家公司获得10亿元C轮融资 估值达到12亿美金
- java double精度丢失 0.1+0.2不等于0.3
- 《击掌为盟》读后感1742字
- 第十七天(续第十六天BPDU相关知识以及STP的配置)