C++实现 逆波兰表达式计算问题

#include <iostream>
#include <string>
using namespace std;
class Stack
{
private:
int size;
int top;
float *listArray;
public:
Stack(int sz=);
~Stack();
bool push(float it);//入栈
bool pop(float& it);//出栈
bool isEmpty();//判断栈是否为空
bool isOne();//判断栈里是否一个元素
};
Stack::Stack(int sz) //栈构造函数
{
size=sz;
top=;
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==)
return false;
it=listArray[--top];
return true;
}
bool Stack::isEmpty() //判断站是否为空
{
if(top==)
return true;
return false;
}
bool Stack::isOne()
{
if(top==)
return true;
return false;
}
Stack::~Stack()
{
delete listArray;
}
//此函数传进输入的字符串,并对字符串进//行扫描并进行相应处理,得到结果(函数声//明)
void compute(char* str);
int main()
{
char str[];
cin.getline(str,,'#');
compute(str);
return ;
}
//此函数传进输入的字符串,并对字符串进//行扫描并进行相应处理,得到结果(函数体)
void compute(char* str)
{
Stack aStack;
float x=,y=,s1,s2,temp;
int i;
i=;
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=;i++;break;
case '-': //减法运算
if(aStack.isOne()||aStack.isEmpty())
{ cout << "表达式不符合要求";
return;
}
aStack.pop(s1); aStack.pop(s2);
x=s2-s1;
aStack.push(x);
x=;
i++;
break;
case '*': //乘法运算
if(aStack.isOne()||aStack.isEmpty())
{
cout << "表达式不符合要求";
return;
}
aStack.pop(s1); aStack.pop(s2);
x=s2*s1;
aStack.push(x);
x=;
i++;
break;
case '/': //除法运算
if(aStack.isOne()||aStack.isEmpty())
{
cout << "表达式不符合要求";
return;
}
aStack.pop(s1);
aStack.pop(s2);
if(s1==)
{
cout << "分母为0!" << endl;
return;
}
x=s2/s1;
aStack.push(x);
x=;
i++;
break;
case ' ': //如果是空格,将数据x押入栈中
if(str[i-]>=&&str[i-]<=)
aStack.push(x);
x=;
i++;
y=;
break;
case '.': //获得小数部分
temp=10.0;
while(str[++i]!=' ') {
if(str[i]>=&&str[i]<=) y=y+(str[i]-)/temp;
temp*=;
}
x+=y;
break;
default: //将字符数字转换为浮点型的数字
if(str[i]>=&&str[i]<=) {
x=x*+str[i]-;
i++;
}
}
}
//判断栈是否只有切仅有一个元素,是就输//出结果
if(aStack.isOne()) {
aStack.pop(x);
cout << str << '=' << x << endl;
}
}

C++实现 逆波兰表达式计算问题的更多相关文章

  1. LeetCode_p150_逆波兰表达式计算/后缀表达式计算

    有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说,表达式总会得出有效数值且不存在除 ...

  2. SDIBT2666——逆波兰表达式求值

    逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+ ...

  3. JavaScript实现计算后缀表达式(逆波兰表达式)以及将中缀表达式转为后缀表达式

    逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出.逆波兰表达式又叫做后缀表达式.这个知识点在数据结构和编译原理这两门课程中都有介绍,下面是一些例子: 正常的表达式 逆波兰表达式 a+b ...

  4. [LeetCode] Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  5. 面试题42:计算逆波兰表达式(RPN)

    这是一个比较简单的题目,借助栈可以轻松实现逆波兰表达式. 题目描述: Evaluate the value of an arithmetic expression in Reverse Polish ...

  6. [LeetCode] 150. Evaluate Reverse Polish Notation 计算逆波兰表达式

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  7. AC日记——逆波兰表达式 openjudge 3.3 1696

    1696:逆波兰表达式 总时间限制:  1000ms 内存限制:  65536kB 描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式 ...

  8. OpenJudge 2694 逆波兰表达式

    1.链接地址: http://bailian.openjudge.cn/practice/2694/ 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 逆波兰表达式是一种把运算 ...

  9. CH BR4思考熊(恒等有理式-逆波兰表达式求值)

    恒等有理式 总时限 10s 内存限制 256MB 出题人 fotile96 提交情况 4/43 描述 给定两个有理式f(X)与g(X),判断他们是否恒等(任意A,如果f(A)与g(A)均有定义,那么f ...

随机推荐

  1. Foundations of Machine Learning: The PAC Learning Framework(2)

    Foundations of Machine Learning: The PAC Learning Framework(2) (一)假设集有限在一致性下的学习界. 在上一篇文章中我们介绍了PAC-le ...

  2. OGG_GoldenGate数据控制进程Manager(案例)

    2014-03-03 Created By BaoXinjian

  3. Storm 简单介绍

    Nimbus :负责资源分配和任务调度, 把任务相关的元信息写入Zookeeper 对应文件夹. Supervisor :负责接受nimbus 分配的任务,启动和停止属于自己管理的worker 进程. ...

  4. Android github上开源项目、酷炫的交互动画和视觉效果地址集合

    Android上开源的酷炫的交互动画和视觉效果:http://blog.csdn.net/u013278099/article/details/50323689 Awesome-android-ui: ...

  5. nginx实战三

    nginx正向代理 https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/z_proxy.md Nginx正向代理使用场景并不多见 ...

  6. (Apache)ab 压力测试 简单使用

    该工具在Apache安装目录的bin目录里面.所以想要这个使用这个工具,只需要下载Apache即可.在Window环境下,推荐使用 PhpStudy 工具的集成环境.就可以轻松拥有Apache.ab压 ...

  7. python3 functools partial 用于函数的包装器详解

    一.partial 的作用: partial 用于对一个已有函数进行包装,达到功能的定制的目的. 二.例子: 假设我们要完成两个功能,第一个功能是完成两个数相加,第二个功能是给一个自增一下 1.传统方 ...

  8. unity save layout

    调整完布局,点Save Layout,并命名,就得到一个新的layout,以后可以直接在下拉菜单中选择并切换到此布局.

  9. Model層資料驗證

    概述 上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证. 本节我们就学习如何使用 System.Co ...

  10. linux的fork()函数具体解释 子进程复制父进程什么

    #include<stdio.h>   #include<string.h>   #include<stdlib.h>   #include<unistd.h ...