一个简易的计算器程序
2014-08-06 19:57
183 查看
/*记得数据结构老师说过可以一边进行中缀表达式的后缀转换 /* 一边进行计算器的运算,今天无聊就把这个大体实现了一下 /*不过还有一些问题:1.还不能支持所有的数据类型 /* 2.对于多位数处理还有BUG /* 3.对于右结合性的运算符还没有实现 */ /*先这样吧 有时间再改 */ #include<stdio.h> #include<ctype.h> #include<stack> using namespace std; stack<char> s; stack<int> s2; int calculate_mark(char a); //判断运算符优先级 void calculate(char *p); //栈的实现部分 void calculate_stack(char b); //数值的加减乘除处理 int calculate_mark(char a) { switch(a) { case '+': case '-': return 1; case '*': case '/': return 2; case '(': return 3; default: { printf("运算符错误或不存在!"); exit(1); } } } void calculate_stack(char b) { int num1,num2,num3; num1=s2.top(); s2.pop(); num2=s2.top(); s2.pop(); if(b=='+') num3=num1+num2; else if(b=='-') num3=num2-num1; else if(b=='*') num3=num1*num2; else if(b=='/') num3=num2/num1; s2.push(num3); } void calculate(char *p) { while(*p) { if(isdigit(*p)) s2.push(*p-'0'); else { if(s.empty()) s.push(*p); else if(*p==')') { while(s.top()!='(') { calculate_stack(s.top()); s.pop(); } s.pop(); } else if(*p=='(') { s.push(*p); } else if(calculate_mark(s.top())<calculate_mark(*p)) s.push(*p); else if(calculate_mark(s.top())>=calculate_mark(*p)) { while(!s.empty()&&s.top()!='('&&calculate_mark(s.top())>=calculate_mark(*p)) { calculate_stack(s.top()); s.pop(); } s.push(*p); } } p++; } while(!s.empty()) { calculate_stack(s.top()); s.pop(); } } int main() { char *p="3*(6+1)-4/2+6"; calculate(p); printf("%d\n",s2.top()); return 0; }
相关文章推荐
- wxWidgets学习笔记(四):编写一个简易的计算器程序
- 一个简易需要注册的留言版程序
- 用java写一个计算器程序
- 利用简单工厂模式设计一个计算器的程序
- 一个简易的屏幕保护程序
- 使用面向对象的编程思想写一个简单的控制台计算器程序,放松一下
- 我的第一个Windows Phone7程序----------一个简单的计算器
- 计算器程序已经完成,直接用函数写的,没有写成一个类!
- 一个简易的重启程序
- linux c下的一个简易http代理程序
- ASP.NET一个简易的WebServer,用控制台程序模拟IIS 托起web服务
- 一个简易的UDP Proxy程序zz
- 一个简易的屏幕录制程序
- 今天没怎么写程序,就用JAVA调了下记事本,计算器,嘿嘿,写一个代码也是热身呀~~~
- 一个简易的游戏程序
- 一个简易需要注册的留言版程序
- 一个简单的计算器程序(C++)
- 小程序:一个计算器(5月16日)
- 编写Applet程序实现一个计算器,包括10个数字(0~9)按钮和4个运算符(加、减、乘、除)按钮,以及等号和清空两个辅助按钮,还有一个显示输入输出的文本框。试用GridLayout实现之
- J2EE实践第一部分-创建一个简单的JSF Web程序(简单网页计算器)