题意:给你一个字符串,要求把它按语法转化成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. 机器学习实战 - 读书笔记(06) – SVM支持向量机

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...

  2. mysql init-file参数中语句限制

    mysql 启动选项中的init-file文件的内容目测只能是dml语句,不能包含ddl,否则执行就会报错,但不影响启动本身..太扯了..

  3. 六个创建模式之工厂方法模式(Factory Method Pattern)

    问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...

  4. docker入门指南(转载)

    原文: http://bg.biedalian.com/2014/11/20/docker-start.html 关于 docker 今天云平台的同事提到, 现在的运维就是恶性循环, 因为大家都在申请 ...

  5. Exchange 2013 、Lync 2013、SharePoint 2013 二

    上一篇简单介绍了安装过程,本篇主要集成 上一篇文章有关于头像的显示问题,engineer  给出了一个连接,介绍了Exchange和Lync的集成过程,根据介绍都配制了一遍. 一.Exchange 和 ...

  6. H5实现的可自定义贪吃蛇游戏

    原创游戏,使用lufylegend.js开发 用canvas实现的贪吃蛇游戏,与一般的贪吃蛇游戏不同,图片经过美工设计,代码设计支持扩展和自定义. 游戏元素丰富,包括障碍物(仙人掌),金币(奖励),苹 ...

  7. C#中的Mutex对象认识

    我们知道,有些应用程序可以重复打开,有些只能打开一个,我以前写的程序为了防止用户打开多个程序,都是去遍历Process 查找进程的方式,现在看起来真是不专业,今天看大神的破解分析文章时,认识了mute ...

  8. GP的使用心得

    在ArcEngine时,GP无疑是GIS开发者的神器.自ArcEngine9.2开始新增一个程序集ESRI.ArcGIS.Geoprocessor,它能调用包含扩展模块在内的所有Geoprocessi ...

  9. 正确匹配URL的正则表达式

    网上流传着多种匹配URL的正则表达式版本,但我经过试验,最好用的还是从stackoverflow上查到的: (https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_| ...

  10. dict和set

    #dict和set #dict #Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map #使用键-值(key-value)存储,具有极快的查找速度. #字 ...