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++实现 逆波兰表达式计算问题相关推荐

  1. Java逆波兰表达式计算

    后缀表达式(逆波兰表达式) 运算符位于操作数之后 从左至右扫描表达式,遇到数字遇到数字时,将数字压栈,遇到运算符时,弹出栈顶的两个元素,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈, ...

  2. C语言实现逆波兰表达式计算函数(含浮点型、整型混合运算)

    基本实现思路: (1)逆波兰表达式运算: 按顺序遍历整个表达式 ,若遇到操作数,则入栈,若遇到操作符,则连续弹出两个操作数(有序)进行运算,并将结果压入栈中,当栈中只剩下一个操作数时,为最终运算结果. ...

  3. 程序员笔记逆波兰表达式计算

    //纯数组模拟栈实现(推荐) class Solution {          public static int evalRPN(String[] tokens) {         int[] ...

  4. 数据结构:后缀表达式(逆波兰表达式)

    逆波兰表达式计算 package com.atchina.stack;import java.util.ArrayList; import java.util.List; import java.ut ...

  5. Java 逆波兰表达式完成计算器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 三大表达式 一.中缀转后缀 二.逆波兰表达式计算 总结 三大表达式 前缀表达式 中缀表达式 :就是我们平时常见的表达式 对人来说 ...

  6. 栈应用-逆波兰表达式(CPP实现简单易懂图解)

    栈应用-逆波兰表达式(后缀表达式) 逆波兰表达式定义: 在由运算符(operator)和操作数(operand)组成的表达式中不使用括号(parenthesis-free)即可表示带优先级的运算关系 ...

  7. 波兰表达式与逆波兰表达式

    中缀表达式:(3+4)×5-6 波兰(前缀)表达式:- × + 3 4 5 6 逆波兰(后缀)表达式:3 4 + 5 × 6 - 波兰表达式计算规则: 1.找出"运算符.操作数.操作数&qu ...

  8. php逆波兰表达式,PHP实现逆波兰式 - 计算工资时用

    近期一个小项目需要用到公式运算, 所以就进行一些了解,以下内容均属于个人经验. 在PHP中实现公式表达式四则运算大概有两种方法: 1)使用系统函数eval 2)将表达式转换成逆波兰表达式进行计算. / ...

  9. 逆波兰表达式的生成及计算

    逆波兰表达式(后缀表达式)生成算法: (1)构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则. (2)读入一个用中缀表示法表示的简单算术表达式,为方便起见,认为地在字符串后面加入一个特殊字 ...

  10. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)

    题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...

最新文章

  1. 3dmax2021入门学习教程
  2. 【AngularJS】—— 4 表达式
  3. win10 看不到其它计算机,w10网上邻居搜索不到其它电脑怎么办
  4. Oracle Events事件
  5. Bash shell - 2
  6. 百度运营专家:互联网运营必读书目(实用推荐)
  7. 计算机应用头部案例提交,基于头部位置的应用程序放置的制作方法
  8. 智能运维监管系统终端_什么系统能实现机房智能运维?
  9. 【转】MS-DOS下怎样使用解压缩共具
  10. java http soap_在Spring中发布SOAP HTTP Webservice - Java杂家 - Blo...
  11. 15. (附加)链表中间节点(C++版本)
  12. Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic
  13. 分布式事务解决方案之可靠消息最终一致性
  14. 中兴捧月比赛DIJKSTRA派算法说明
  15. Learning optical flow from still images
  16. 使用Qt实现FTP客户端
  17. 中国AI独角兽新增一员:这家公司获得10亿元C轮融资 估值达到12亿美金
  18. java double精度丢失 0.1+0.2不等于0.3
  19. 《击掌为盟》读后感1742字
  20. 第十七天(续第十六天BPDU相关知识以及STP的配置)

热门文章

  1. 双系统win+ubuntu无法访问win的盘符
  2. jQuery阻止表单提交
  3. HDU 4336:Card Collector 期望+状压
  4. HTML组件化CSS方面的思考
  5. hadoop2.2.0 core-site.xml--global properties
  6. 设置文本输入框光标位置,兼容ie,w3c
  7. Xcode 添加 background modes、Associated Domains 等设置项
  8. Cordova原理一
  9. 忙了1天的qte-arm环境的搭建
  10. Cmdkey 凭证管理器工具