首页 > 代码库 > HDU 4964 Emmet --模拟
HDU 4964 Emmet --模拟
题意:给你一个字符串,要求把它按语法转化成HTML格式。
分析:这题其实不难,就是一个递归的事情,当时忽略了括号嵌套的情况,所以一直WA,后来加上这种情况后就过了。简直醉了。
处理id和class时,在一个‘>‘内,先把遇到的id和class都push到一个容器中,然后再输出即可。
这题要注意的地方: 1.括号以及括号嵌套 2.好像没了
代码有点长,将就看吧。
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>#include <string>#include <vector>using namespace std;string S;inline int StoNum(string str){ int num = atoi(str.c_str()); return num;}void print(int u,int v){ int i; if(u >= v) return; for(i=u;i<v;i++) { if(S[i] == ‘>‘) break; } int endi,sta = u; if(i == v) endi = v; else endi = i; if(S[u] == ‘(‘) { int cnt = 1; for(i=u+1;i<v;i++) { if(S[i] == ‘)‘ && cnt == 1) break; else if(S[i] == ‘)‘) cnt--; else if(S[i] == ‘(‘) cnt++; } sta = u+1; endi = i; print(sta,endi); print(endi+1,v); return; } int flag = 0; // 0:div 1:id 2:class 3:multi string divi = "",classi = "",idd = "",multi = ""; vector<string> cls,id; cls.clear(),id.clear(); vector<pair<int,int> > kuo; kuo.clear(); for(i=sta;i<endi;i++) { if(S[i] != ‘#‘ && S[i] != ‘*‘ && S[i] != ‘.‘ && S[i] != ‘(‘) { if(flag == 0) divi += S[i]; else if(flag == 1) idd += S[i]; else if(flag == 2) classi += S[i]; else if(flag == 3) multi += S[i]; } else if(S[i] == ‘#‘) // 0:div 1:id 2:class 3:multi { if(flag == 1) { id.push_back(idd); idd = ""; } else if(flag == 2) { cls.push_back(classi); classi = ""; } flag = 1; } else if(S[i] == ‘.‘) { if(flag == 1) { id.push_back(idd); idd = ""; } else if(flag == 2) { cls.push_back(classi); classi = ""; } flag = 2; } else if(S[i] == ‘*‘) { if(flag == 1) { id.push_back(idd); idd = ""; } else if(flag == 2) { cls.push_back(classi); classi = ""; } flag = 3; multi = ""; } else if(S[i] == ‘(‘) { int now; int cnt = 1; for(now=i+1;now<endi;now++) { if(S[now] == ‘)‘ && cnt == 1) break; else if(S[now] == ‘)‘) cnt--; else if(S[now] == ‘(‘) cnt++; } kuo.push_back(make_pair(i+1,now)); i = now; } } if(idd != "") id.push_back(idd); if(classi != "") cls.push_back(classi); int num = 1; if(multi != "") num = StoNum(multi); for(int k=0;k<num;k++) { cout<<"<"<<divi; if(id.size() != 0 || cls.size() != 0) cout<<" "; if(id.size()) { cout<<"id=\""; cout<<id[0]; for(i=1;i<id.size();i++) cout<<" "<<id[i]; cout<<"\""; } if(cls.size()) { if(id.size()) cout<<" "; cout<<"class=\""; cout<<cls[0]; for(i=1;i<cls.size();i++) cout<<" "<<cls[i]; cout<<"\""; } cout<<">"; if(kuo.size()) { for(i=0;i<kuo.size();i++) print(kuo[i].first,kuo[i].second); } print(endi+1,v); cout<<"</"<<divi<<">"; }}int main(){ int n; scanf("%d",&n); while(n--) { cin>>S; print(0,S.length()); puts(""); } return 0;}
HDU 4964 Emmet --模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。