中后缀表达式的相互转换和四则运算表达式求值
来源:互联网 发布:淘宝身高体重尺码表 编辑:程序博客网 时间:2024/06/05 14:34
这篇博客讲的超级好
//所以原理和定义就不多bb了. 不懂的自己看博客吧.
下面附上代码实现:
1:中缀表达式转后缀表达式Code
/** @Cain*/const int maxn = 1e3+5;char zhong[maxn];char hou[maxn];stack<char>S;void solve(){//这个是只有单个整数和运算符,只是直观给出后缀表达式,计算的当然不一样. scanf("%s",zhong); int len = strlen(zhong); int cnt = 0; for(int i=0;i<len;i++){ //注意一个优先级问题!!! if(zhong[i]>='0' && zhong[i]<='9') hou[cnt++] = zhong[i]; else{ //也要特别注意判断运算符优先级的问题. if(zhong[i] == '(' ) S.push(zhong[i]); else if(zhong[i] == ')' ){ while(!S.empty()){ char tmp = S.top(); S.pop(); if(tmp == '(' ) break; hou[cnt++] = tmp; } } else if(zhong[i] == '*' || zhong[i] == '/'){ while(!S.empty()){ char tmp = S.top(); if(tmp == '+' || tmp == '-' || tmp == '(') break; S.pop(); hou[cnt++] = tmp; } S.push(zhong[i]); } else if(zhong[i] == '+' || zhong[i] == '-'){ while(!S.empty()){ char tmp = S.top(); if(tmp == '(') break; S.pop(); hou[cnt++] = tmp; } S.push(zhong[i]); } } } while(!S.empty()){ //有可能运算符还有. char tmp = S.top(); S.pop(); hou[cnt++] = tmp; } hou[cnt] = 0; printf("%s\n",hou);}
模板题
2 : 四则运算表达式求值(有了以上的基础,这个就比较简单)
Code
/** @Cain*/const int maxn = 1e3+5;char zhong[maxn];char hou[maxn];char num[maxn];db res[maxn];stack<char>S;stack<db>cal;void solve(){ while(~scanf("%s",zhong)){ Fill(hou,0); Fill(num,0); Fill(res,0); int len = strlen(zhong); int cnt = 0; for(int i=0;i<len;i++){ if(zhong[i]>='0' && zhong[i]<='9'){ int ans = 0; Fill(num,0); while((zhong[i]>='0' && zhong[i]<='9') || zhong[i] == '.'){ num[ans++] = zhong[i]; i++; } i--; res[cnt++] = atof(num); } else{ if(zhong[i] == '(' ) S.push(zhong[i]); else if(zhong[i] == ')' ){ while(!S.empty()){ char tmp = S.top(); S.pop(); if(tmp == '(' ) break; hou[cnt++] = tmp; } } else if(zhong[i] == '*' || zhong[i] == '/'){ while(!S.empty()){ char tmp = S.top(); if(tmp == '+' || tmp == '-' || tmp == '(') break; S.pop(); hou[cnt++] = tmp; } S.push(zhong[i]); } else if(zhong[i] == '+' || zhong[i] == '-'){ while(!S.empty()){ char tmp = S.top(); if(tmp == '(') break; S.pop(); hou[cnt++] = tmp; } S.push(zhong[i]); } } } while(!S.empty()){ //有可能运算符还有. char tmp = S.top(); S.pop(); hou[cnt++] = tmp; } for(int i=0;i<cnt;i++){ if(hou[i] == 0) cal.push(res[i]); else{ //注意这些的写法与之前的处理的关系. db t1 = cal.top(); cal.pop(); db t2 = cal.top(); cal.pop(); if(hou[i] == '+' ) cal.push(t1+t2); if(hou[i] == '-' ) cal.push(t2-t1); //注意数被取出来的先后顺序(-和/运算有影响). if(hou[i] == '*' ) cal.push(t1*t2); if(hou[i] == '/' ) cal.push(t2/t1); } } printf("%.2f\n",cal.top()); cal.pop(); }}
阅读全文
0 0
- 中后缀表达式的相互转换和四则运算表达式求值
- 【数据结构】栈的应用---四则运算表达式求值(中缀表达式与后缀表达式转换)
- 四则运算的中缀表达式和后缀表达式
- 四则运算的中缀表达式和后缀表达式
- 后缀表达式的求值
- 栈和二叉树--中缀/后缀表达式的相互转换
- 前缀,中缀,后缀表达式的转换,表达式的求值
- [整合]中缀表达式、前缀表达式、后缀表达式的相互转换
- 前缀---中缀--后缀 表达式的相互转换
- 后缀表达式-表达式求值以及转换
- 栈的应用二--四则运算表达式求值(逆波兰表示:后缀表达式)
- C++栈的应用——后缀表达式求值、中缀表达式到后缀表达式的转换
- 栈的应用 后缀表达式求值 后缀表达式与中缀表达式的转换
- 利用栈将中缀表达式转换成后缀表达式,并将得到的后缀表达式求值
- 栈的运用(中缀表达式转换为后缀表达式,并对后缀表达式求值。)
- 四则运算-表达式求值
- 四则运算(表达式求值)
- 四则运算表达式求值
- myeclipse10配置maven
- 静态存储区、栈、堆的内存分配
- Referenced file contains errors (http://www.springframework.org/schema/beans/spring-beans-3.1.xsd)
- B. Sereja ans Anagrams----map维护queue
- 进程间通信-Queue 消息队列 先进先出
- 中后缀表达式的相互转换和四则运算表达式求值
- 模仿AlphaGo围棋博弈,MuGo实现策略网络以及蒙特卡洛树搜索
- Java菜鸟学习日记27
- 学习体系+杂想
- poj 3243 Clever Y
- Spark RDD操作讲解
- C语言实现的一个简单的HTTP程序
- C++中循环语句语法
- 指针与句柄的区别