C表达式求值做加法和乘法
2015-07-23 14:32
405 查看
/* Name: 表达式 包含乘法和加法, Copyright: hc Author: hc Date: 06/05/15 16:46 Description: 思路【数据表达式是先数字再符号再数字,所以就 先读第一数字,以后都认为是符号 和一个数字,这样以后就都可以以判别符号是不是'\n'来判别 */ #include<iostream> #include<stack> using namespace std; int main() { int a,c,x,y,z,temp,i=0,j=0; char b; stack<int> num;//数字栈 stack<char> exp;//符号栈 scanf("%d",&a);//先获取一个数字 num.push(a);//把数据进入数字栈 // cout<<"读取第"<<++i<<"个数字"<<a<<endl; while(scanf("%c",&b)==1)//判别字符 { // cout<<"读取第"<<++j<<"个符号"<<b<<endl; //cout<<a<<endl; if(b!='\n')//如果不是结尾 { if(b=='*')//判断是不是乘号 { cin>>c;//读一个数字 temp=num.top();//取出另一个数字 num.pop();//从堆栈中去掉这个数字 temp=temp*c;//堆栈数字temp乘以读入的数字c // scanf("%c",&b);//cin>>b; //这是一个出错点 // if (b=='\n') break; num.push(temp);//把乘法结果入栈 // cout<<"数字栈中的值有"<<num.top()<<endl; } else //如果不是乘法那么就是加法 { cin>>c; //a=a+c; num.push(c);//数字入栈 exp.push(b); //符号入栈 } } else//如果到了文件尾部 { // cout<<"这是进入到没有标点符号的情况"; while(!exp.empty())//这个是字符也就是标点符号堆栈,现在都是低级的运算法,加法 { exp.pop();//符号出栈丢掉 x=num.top();//数字赋值 num.pop();//数字出栈丢掉 y=num.top();//数字赋值 num.pop();//数字出栈丢掉 z=x+y;//加法 num.push(z);//把结果写入到堆栈 } break; } } cout<<num.top();//最后数字栈里面存着结果 system("pause"); return 0; }
相关文章推荐
- 向上兼容和向下兼容
- 01-复杂度2. Maximum Subsequence Sum
- PHP中VC6、VC9、TS、NTS版本的区别与用法详解
- 设计模式-装饰模式(Decorator Pattern)
- c语言课程设计
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面
- android postDelayed方法实现定时器
- myeclipse下导入架包的两种方式
- 数据位交换
- UTC时间string转换成本地时间string
- linux终端那些事儿
- MySQL Cluster: Two webserver setup
- 桥接模式(透传模式)和直驱模式
- Android碎片第一期
- UNIX有哪些?
- Bootstrap学习笔记-模态框
- easyui 获取当前页签选中的名称
- linux安装lua相关编译报错
- 黑马程序员-迭代器
- [Unity3D]关于为什么保存Transform等引用效率会更高