C++实现 逆波兰表达式计算问题
来源:互联网 发布:移动协同软件最新版 编辑:程序博客网 时间:2024/06/03 01:42
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; }}
阅读全文
0 0
- C++实现 逆波兰表达式计算问题
- 逆波兰表达式的计算问题
- Python3实现逆波兰表达式计算
- 逆波兰表达式计算
- 计算表达式-逆波兰表达式
- 逆波兰表达式C语言实现
- C语言实现逆波兰表达式
- C 逆波兰表达式
- android逆波兰表达式的应用(四)逆波兰表达式的计算实现 -----小达
- 逆波兰表达式问题
- 逆波兰表达式实现
- 递归计算逆波兰表达式
- MFC计算器 用vector实现和计算逆波兰表达式
- 计算表达式的值c++逆波兰式实现方法
- 逆波兰表达式 转换和计算 C++实现
- 数据结构-------计算逆波兰表达式(后缀表达式)
- 逆波兰表达式算法实现
- 逆波兰表达式java实现
- C语言实现商品销售系统
- C++实现最少硬币兑换问题
- C++实现八皇后问题
- Java 多线程深入分析(一)
- C++ 递归实现汉诺塔
- C++实现 逆波兰表达式计算问题
- C++实现 找出10000以内的完数
- 面试笔记2
- 面试笔记1
- Tomcat:基础安装与使用教程
- eclipse安装使用教程
- 数据分析工具R和RStudio入门介绍
- Python idle安装与使用教程 调试、下载
- VMWare虚拟机安装创建虚拟机的使用教程