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. Linux 通过cron定期执行 php文件(转)

    Linux 通过cron定期执行 php文件 补充几点: 1. 要在php文件头加上解释器的路径,通常是 #!/usr/bin/php 2. 授予要执行的php文件执行权限   chmod a+x x ...

  2. MySQL插入性能优化

    目录 MySQL插入性能优化 代码优化 values 多个 一个事务 插入字段尽量少,尽量用默认值 关闭 unique_checks bulk_insert_buffer_size 配置优化 inno ...

  3. Report_Report Builder的一些基本概念(概念)

    2014-05-31 Created By BaoXinjian

  4. OJ刷题---罗马数字转十进制

    题目要求: 输入代码: #include<iostream> using namespace std; int main() { int i,j,n,k; int num[7]= {1, ...

  5. stm32 usart的几种通信模式

    一 USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART支持同步单向通信和半双工单线通信,也支持LIN(局 ...

  6. 多进程对 MySQL update的影响

    今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...

  7. ERROR: JDWP Unable to get JNI 1.2 environment的错误解决方法

    在用java编程的时候,在debug模式下偶尔会出现下面的错误,jdk1.6.0-rc1: ERROR: JDWP Unable to get JNI 1.2 environment, jvm-> ...

  8. vim:去掉响铃

    vim在移动字符出界(上下左右)包括按<ESC>建都会响铃,有时候真的很烦. 在网上搜了一下,原来是visualbell来控制的,在vim里使用命令:help visualbell,原来禁 ...

  9. JS格式化数字保留两位小数点示例代码

    格式化数字保留两位小数点实现的方法有很多,在接下来的文章中将为大家详细介绍下如何使用js来实现 a = a.toFixed(2);//保留2位但结果为一个String类型 a = parseFloat ...

  10. js 控制图片大小核心讲解

    控制图片大小的方法有很多,在本文将为大家详细介绍下使用js实现缩放图片,核心代码如下,感兴趣的朋友可以参考下 缩放图片脚本分享 <!DOCTYPE HTML PUBLIC "-//W3 ...