当前位置: 首页 > news >正文

帝国cms 做网站地图开发一个项目的流程

帝国cms 做网站地图,开发一个项目的流程,机关建设网站,残疾人服务平台题目描述 中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 4),中缀表达式是人们常用的算术表示方法。后缀表达式不包含括号,运算符放在两个运算对象的后面&#…

题目描述

中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将中缀表达式转换为后缀表达式。(测试数据元素为单个字符)

输入

中缀表达式

输出

后缀表达式

样例输入复制

A+(B-C/D)*E

样例输出复制

ABCD/-E*+

这个题我看到解法当中有通过编译原理当中的文法表达式来处理的,也有用堆栈模拟的。

我的方案是用递归。

重点是要把表达式按优先级进行切割。
我是这么想的:
对于表达式:A+B*C-(D*F*(F+B+C*D)-(A*H))*T
先按优先级最低的+、-号进行切分,但是主要切分时要把括号内的表达式当成整体,于是可以切割成:
A
B*C
(D*F*(F+B+C*D)-(A*H))*T
三个子表达式
【如果+、-号无法切割,就扫描*、/能不能切割,还是不能就说明要么这个表达式只有一个原子,要么就是整个表达式都用括号包起来了。】
这里我们可以继续递归切割,A已经是原子,无需切割。第二个表达式可以继续切割成B和C
这样,每次切割,我们可以得到两个列表,一个用来装切割的表达式,一个用来装两个表达式之间的符号。
最后,假设我们的处理函数为f
那么对于这个例子,实际上我要求:f(A+B*C-(D*F*(F+B+C*D)-(A*H))*T)
根据刚才的分析,显然他可以通过递归化简为:f((D*F*(F+B+C*D)-(A*H))*T)f(A)f(B*C)+-
这样不断的递归f当中的表达式,最后合并答案就是我们需要的逆波兰表达式!
可以观看代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<string>
#include<map>
#include<queue>
#include<iostream>
#include<list>
#include<set>
#include<stack>using namespace std;bool expr_cut(string root_expr,vector<string>& expr_list,vector<char>& op_list)
{stack<int> s;int len=root_expr.size();if(len==1)return true;string expr_now;bool first_flag=false,second_flag=false;for(int i=0;i<len;++i){if((root_expr[i]=='+' || root_expr[i]=='-') && s.empty()){expr_list.push_back(expr_now);op_list.push_back(root_expr[i]);expr_now.clear();first_flag=true;continue;}else if(root_expr[i]=='('){s.push(i);}else if(root_expr[i]==')'){s.pop();}expr_now=expr_now+root_expr[i];}expr_list.push_back(expr_now);if(first_flag)return false;expr_list.clear(),op_list.clear(),expr_now.clear();for(int i=0;i<len;++i){if((root_expr[i]=='*' || root_expr[i]=='/') && s.empty()){expr_list.push_back(expr_now);op_list.push_back(root_expr[i]);expr_now.clear();second_flag=true;continue;}else if(root_expr[i]=='('){s.push(i);}else if(root_expr[i]==')'){s.pop();}expr_now=expr_now+root_expr[i];}expr_list.push_back(expr_now);if(second_flag)return false;expr_list.clear(),op_list.clear(),expr_now.clear();root_expr=root_expr.substr(1,root_expr.size()-2);return expr_cut(root_expr,expr_list,op_list);
}string f(string root_expr)
{vector<string> expr_list;vector<char> op_list;bool is_atom=expr_cut(root_expr,expr_list,op_list);if(is_atom)return root_expr;else{string result="";string first_item=f(expr_list[0]);for(int i=1;i<expr_list.size();i++){string second_item=f(expr_list[i]);result=first_item+second_item+result+op_list[i-1];first_item=second_item;}return result;}
}int main()
{string expr;while(cin>>expr){string result=f(expr);cout<<result;}return 0;
}/*
A+B*C-(D*F*(F+B+C*D)-(A*H))*T
(A+B*C)
*/

http://www.yayakq.cn/news/228260/

相关文章:

  • 怎么制作网站生成图片青果软件学院教务网络管理系统
  • 全国大型免费网站建设成都网站建设方案推广
  • 河南省做网站的公司有哪些怎么制作自己的链接
  • 靖边县建设局网站建设官网站
  • 成都学生做网站邢台网站设计怎么做
  • 社区类网站开发实践网站建设需要用到什么软件
  • wordpress用户站点有哪些企业网站
  • 怎么自己做刷赞网站医学类的网站做Google
  • 给女友做的网站 源码丰台网站开发公司
  • 网站建设及维护业务服务合同濮阳网络安全报警电话
  • 网站每天一条推送怎么做的wordpress 用户反馈
  • 网站设计有哪些语言版本工业设计专业世界大学排名
  • 广东高端网站建设公司网站开发用哪个软件方便
  • 天津建设网站的公司哪家好前海网站建设
  • 建设局网站公告电脑网站页面怎么调大小
  • 怎么建设卡盟网站wordpress主题二次元模板
  • 泰州企业建站系统拍卖网站建设方案
  • 建设信息网站wordpress慢死了
  • 网站收录提交接口山东住房和城乡建设厅网站注册中心
  • 微网站开发策划1企业网站案例
  • 北京专业网站建设大全网络推广服务开票
  • 如何做外贸营销型网站推广seo概念
  • 龙口网站开发淘点金wordpress插件
  • 1个ip可以做几个网站吗怎么做好网站
  • 如何搭建内网网站做快消品看那些网站好
  • 青岛网站推广公司网站建设中最重要的环节是什么
  • 阿里云做网站买什么软件德格网站建设
  • 大宇网络做网站怎么样传媒大学附近网站建设公司
  • 建设境外网站搭建影视网站
  • wordpress mip提交网站外链优化方法