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. SpringBoot自定义HttpMessageConverter

    Spring就是一个大大的插线板,上面插着各种各样的Bean. SpringBoot大大简化了Spring的配置,将原来放在XML中的配置大量的在代码中使用注解实现.这么做有利有弊,总体上利大于弊. ...

  2. Apache Storm使用

    Apache Storm 是 Apache 基金会的开源的分布式实时计算系统.与 Hadoop 的批处理相类似,Storm 可以对大量的数据流进行可靠的实时处理,这一过程也称为“流式处理”,是分布式大 ...

  3. Jmeter时间函数工具(参考)

    __time : 获取时间戳.格式化时间 ${__time(yyyy-MM-dd HH:mm:ss:SSS,time)}  :格式化生成时间格式 2018-06-01 11:08:23:635 ${_ ...

  4. php log类

    个人抽离出来一个超级简易但是实用的代码段 public static function WriteLog($msg,$module = null,$logLevel = "DEBUG&quo ...

  5. 从jar包中读取资源

    package myspider; import java.io.UnsupportedEncodingException; /** * * @author mark */ public class ...

  6. mac eclipse 执行adb 命令,提示command not fount

    java执行命令: p = Runtime.getRuntime().exec(commandStr); [INFO ] 执行命令结果:nullbash: adb: command not found ...

  7. InnoDB Master Thread I/O Rate详解

    一.innodb 在刷盘时要面对的问题: 1.对于innodb 的master thread 这个线程来说,它会在后台执行许多的任务,这些任务大多数都是与IO操作相关的, 比如“刷新脏页到磁盘”.“合 ...

  8. Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)

    关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...

  9. CentOS的字符集locale的设置

    LANGLC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值.类似于 LC_ALL. LC_ALL它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值.注意,LANG的值不受该 ...

  10. C# 遍历枚举(枚举是目的,遍历(获取)是手段)

    C# 遍历枚举   C#中,如何获取(遍历)枚举中所有的值: public enum Suits { Spades, Hearts, Clubs, Diamonds, NumSuits } priva ...