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. 32个Chrome 针对网页设计师和开发人员扩展

    http://zmingcx.com/32-chrome-web-designers-and-developers-to-expand.html

  2. android 登陆界面

    LoginActivity.java package com.example.ruian; import android.app.Activity; import android.app.AlertD ...

  3. 如何不让DataGridView自动生成列

    如果不想让DataGridView自动生成与数据源对应的列, 只需要把属性AutoGenerateColumns设为false即可. 需要注意: 在界面设计的属性窗口中是看不到AutoGenerate ...

  4. VS2010 单元测试,性能测试 案例

    http://www.cnblogs.com/heqichang/category/315226.html

  5. introduction to python for statistics,analysis笔记2

    一.行列式连接concatenate函数,axis=0是垂直拼接,axis=1是水平拼接 x=np.array([[],[,]]); y=np.array([[],[,]]); z=np.concat ...

  6. NodeJS操作Redis实现消息的发布与订阅

    首先先说一下流程: 1.保存数据到Redis,然后将member值publish到 chat频道(publish.js功能) 2.readRedis.js文件此前一直在监听chat频道,readRed ...

  7. Android开发3——查看和输出日志信息

    一.错误级别 Error > Warn > Info > Debug > Verbose(冗余) 二.Android项目日志查看视图 Console视图只能看项目的部署到模拟器 ...

  8. Spring在xml配置里配置事务

    事先准备:配置数据源对象用<bean>实例化各个业务对象. 1.配置事务管理器. <bean id="transactionManager" class=&quo ...

  9. 练习 Dijkstra 最短路径算法。

    练习 Dijkstra 最短路径算法. #coding: utf-8 # Author: woodfox, Oct 14, 2014 # http://en.wikipedia.org/wiki/Di ...

  10. Clojure 的 Enlive 库尝试

    Enlive 是一个 Clojure 下的 html 模板引擎.其特别之处在于,它既没有发明任何 html 内嵌的模板 DSL 语法:也不会混杂代码和表现. 一切的一切,都是按下列模型定义的次序执行的 ...