题意:给你一个字符串,要求把它按语法转化成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 = ;
for(i=u+;i<v;i++)
{
if(S[i] == ')' && cnt == ) break;
else if(S[i] == ')') cnt--;
else if(S[i] == '(') cnt++;
}
sta = u+;
endi = i;
print(sta,endi);
print(endi+,v);
return;
}
int flag = ; // 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 == ) divi += S[i];
else if(flag == ) idd += S[i];
else if(flag == ) classi += S[i];
else if(flag == ) multi += S[i];
}
else if(S[i] == '#') // 0:div 1:id 2:class 3:multi
{
if(flag == )
{
id.push_back(idd);
idd = "";
}
else if(flag == )
{
cls.push_back(classi);
classi = "";
}
flag = ;
}
else if(S[i] == '.')
{
if(flag == )
{
id.push_back(idd);
idd = "";
}
else if(flag == )
{
cls.push_back(classi);
classi = "";
}
flag = ;
}
else if(S[i] == '*')
{
if(flag == )
{
id.push_back(idd);
idd = "";
}
else if(flag == )
{
cls.push_back(classi);
classi = "";
}
flag = ;
multi = "";
}
else if(S[i] == '(')
{
int now;
int cnt = ;
for(now=i+;now<endi;now++)
{
if(S[now] == ')' && cnt == ) break;
else if(S[now] == ')') cnt--;
else if(S[now] == '(') cnt++;
}
kuo.push_back(make_pair(i+,now));
i = now;
}
}
if(idd != "")
id.push_back(idd);
if(classi != "")
cls.push_back(classi);
int num = ;
if(multi != "")
num = StoNum(multi);
for(int k=;k<num;k++)
{
cout<<"<"<<divi;
if(id.size() != || cls.size() != )
cout<<" ";
if(id.size())
{
cout<<"id=\"";
cout<<id[];
for(i=;i<id.size();i++)
cout<<" "<<id[i];
cout<<"\"";
}
if(cls.size())
{
if(id.size())
cout<<" ";
cout<<"class=\"";
cout<<cls[];
for(i=;i<cls.size();i++)
cout<<" "<<cls[i];
cout<<"\"";
}
cout<<">";
if(kuo.size())
{
for(i=;i<kuo.size();i++)
print(kuo[i].first,kuo[i].second);
}
print(endi+,v);
cout<<"</"<<divi<<">";
}
} int main()
{
int n;
scanf("%d",&n);
while(n--)
{
cin>>S;
print(,S.length());
puts("");
}
return ;
}

HDU 4964 Emmet --模拟的更多相关文章

  1. hdu 4964 恶心模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4964 给定语句,按照语法翻译html并输出. 就是恶心的模拟,递归搞就行了 处理id和class时,在一个'&g ...

  2. HDU 4121 Xiangqi 模拟题

    Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...

  3. hdu 5071 Chat(模拟)

    题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...

  4. hdu 4740【模拟+深搜】.cpp

    题意: 给出老虎的起始点.方向和驴的起始点.方向.. 规定老虎和驴都不会走自己走过的方格,并且当没路走的时候,驴会右转,老虎会左转.. 当转了一次还没路走就会停下来.. 问他们有没有可能在某一格相遇. ...

  5. HDU 2568[前进]模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2568 关键思想:傻傻地模拟 代码如下: #include<iostream> using ...

  6. HDU 5965 枚举模拟 + dp(?)

    ccpc合肥站的重现...一看就觉得是dp 然后强行搞出来一个转移方程 即 根据第i-1列的需求和i-1 i-2列的枚举摆放 可以得出i列摆放的种类..加了n多if语句...最后感觉怎么都能过了..然 ...

  7. HDU 5083 Instruction --模拟

    题意:给出汇编指令,解释出编码或者给出编码,解释出汇编指令. 解法:简单模拟,按照给出的规则一步一步来就好了,主要是注意“SET”的情况,还有要输出的东西最好放到最后一起输出,中间如果一旦不对就可以及 ...

  8. HDU 1707 简单模拟 Spring-outing Decision

    Spring-outing Decision Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. HDU 5918 KMP/模拟

    Sequence I Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

随机推荐

  1. [Android] 环境配置之基础开发环境(SDK/Android Studio)(转)

    [Android] 环境配置之基础开发环境(SDK/Android Studio)   博客: blog.csdn.net/qiujuer 网站: www.qiujuer.net 开源库: Geniu ...

  2. js的alert和confirm美化

    --前言-- window对象的alert和confirm标准方法在不同浏览器的显示效果不太相同,有个相同点是都不是很美观.我们的想法是使用js和css分别仿照它们,提供另一套函数,使在不同浏览器的有 ...

  3. SharePoint通过stsadm备份和还原子网站(不是网站集)

    大家都知道SharePoint的stsadm命令提供了很多便捷甚至是唯一的操作方法! 这里列出的所有命令:http://www.cnblogs.com/dadongzuo/archive/2013/0 ...

  4. UC如被百度控股,手机qq浏览器改如何进攻和防守

    很早以前在公司内部论坛里写的一篇文章,绯闻已经过过去了,现在已物事人物,UC已有阿里大靠山了. ----------------------------------------------- 据网络媒 ...

  5. 基础学习day05---面向对象一类,对象、封装

    一.面向对象   1.1.面向对象的概念    很经典的一句话----------万物皆对象 定义:面向对象一相对面向过程而言的        面向对象和面向过程都是一种思想       面向过程-- ...

  6. 网络开始---多线程---NSThread-01-基本使用(了解)(二)

    #import "HMViewController.h" @interface HMViewController () @end @implementation HMViewCon ...

  7. dubbo学习之服务消费者

    1.简介 上节讲了如何发布一个dubbo服务,这节主要讲如何进行消费,创建一个消费者. 2.详细步骤 2.1 项目目录结构 2.2 创建maven项目 这里演示时其实通过一个main方法就可以了,没必 ...

  8. 给你的Mr.Right画张择偶地图像

    爱一个人就算做不到爱他的全部,至少也应该尊重他的真实,而不是苛求他变成你想要的样子. 娶妻当娶郭芙蓉,经典语录.我是郭芙蓉,我不会武功,我来自江湖,我与众不同.再苦再累,就当自己是二百五,再难再险,就 ...

  9. PS网页设计教程XXIV——从头设计一个漂亮的网站

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  10. JodaTime library not available - @DateTimeFormat not supported

    使用spring的@DateTimeFormat来格式化Date类型时,报错: org.springframework.validation.BindException: org.springfram ...