C++实现 逆波兰表达式计算问题
2017-07-08 10:00
483 查看
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 t 4000 rue; 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; } }
相关文章推荐
- C++实现 逆波兰表达式计算问题
- 逆波兰表达式 转换和计算 C++实现
- 算术表达式的计算(基于逆波兰表达式)的c++实现
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- 用C++程序实现复杂表达式的计算问题
- 计算表达式的值c++逆波兰式实现方法
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- 数据结构(19)栈典型问题之C++实现表达式求值
- MFC计算器 用vector实现和计算逆波兰表达式
- #C++实现先中缀转后缀的算术表达式计算
- 逆波兰表达式实现计算器(附c++代码)
- c++实现将表达式转换为逆波兰表达式
- python实现逆波兰计算表达式实例详解
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- 逆波兰表达式的计算问题
- C++实现表达式的计算
- 逆波兰表达式C++代码实现
- 用栈实现表达式计算——C++
- 用 C++ 实现的加、减、乘、除表达式计算
- 实数四则运算表达式的计算,C++ 实现