利用STL容器stack实现一个简单的计算器
2017-03-23 15:00
441 查看
规则:
![](http://img.blog.csdn.net/20170323145720195?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzEwMjkzNTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
#include <iostream> #include <cstring> #include <stack> using namespace std; stack<int>Num; stack<char>Op; const int max_size = 1024; /*将字符串转为int*/ int str2num(char **str) { int temp = 0; while(**str >= '0' && **str <= '9') { temp = temp * 10 + (**str - '0'); (*str)++; } return temp; } int cal(int a,int b,char op) { switch(op) { case '+':return a + b;break; case '-':return a - b;break; case '*':return a * b;break; case '/':return a / b;break; default:break; } } void handlebuffer(char *str) { if(str == NULL) { return; } int num; int a; int b; char op; char *temp = str; while(*temp != '\0') { if(*temp >= '0' && *temp <= '9') { num = str2num(&temp); Num.push(num); } switch(*temp) { case '(': { Op.push(*temp); break; } case ')': { b = Num.top(); Num.pop(); a = Num.top(); Num.pop(); op = Op.top(); Op.pop(); num = cal(a,b,op); Num.push(num); Op.pop(); //将'('出栈 break; } case '+': { if(Op.empty() != true) //当stack为空时,stack.top()使用时,方法会出错 { if(Op.top() == '+' || Op.top() == '-' || Op.top() == '*' || Op.top() == '/') { b = Num.top(); Num.pop(); a = Num.top(); Num.pop(); num = cal(a,b,*temp); Num.push(num); break; } } Op.push(*temp); break; } case '-': { if(Op.empty() != true) { if(Op.top() == '+' || Op.top() == '-' || Op.top() == '*' || Op.top() == '/') { b = Num.top(); Num.pop(); a = Num.top(); Num.pop(); num = cal(a,b,*temp); Num.push(num); break; } } Op.push(*temp); break; } case '*': { if(Op.empty() != true) { if(Op.top() == '*' || Op.top() == '/') { b = Num.top(); Num.pop(); a = Num.top(); Num.pop(); num = cal(a,b,*temp); Num.push(num); break; } } Op.push(*temp); break; } case '/': { if(Op.empty() != true) { if(Op.top() == '*' || Op.top() == '/') { b = Num.top(); Num.pop(); a = Num.top(); Num.pop(); num = cal(a,b,*temp); Num.push(num); break; } } Op.push(*temp); break; } } temp++; } while(Op.empty() != true) { b = Num.top(); Num.pop(); a = Num.top(); Num.pop(); op = Op.top(); Op.pop(); num = cal(a,b,op); Num.push(num); } num = Num.top(); Num.pop(); cout << "result = " << num << endl; } int main() { char buffer[max_size]; cout << "Please input 1 + 2 + 3 *(4 + 5)" << endl; cin.getline(buffer,max_size); handlebuffer(buffer); return 0; }
相关文章推荐
- 利用ANTLR4实现一个简单的四则运算计算器
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
- 利用JAVA的动态属性之反射原理实现一个简单AOP容器 - AOP的实现原理分析
- 利用Compass实现一个简单的搜索引擎
- 用ASP.NET实现一个简单的计算器(适合入门者)
- 用UDP实现可靠文件传输,如何利用UDX创建一个简单的WIN32程序
- 利用 Axis 实现一个简单的 Web Serive例子
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 利用java做一个简单的计算器
- 用Visual studio2005的单元测试框架实现一个简单的计算器
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 利用org.apache.commons.net.ftp包实现一个简单的ftp客户端实用类
- 16—【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能
- 利用MailMessage,实现一个简单的mail 发送
- 一个简单的计算器的实现(C++)
- J2ME应用实例——一个简单的计算器实现(附源代码)
- 用ASP.NET实现一个简单的计算器(适合入门者)
- 利用java做一个简单的计算器
- 利用java实现一个简单的远程监控程序
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!