hdu - 4782 - Beautiful Soup(模拟)
题意:输出一堆乱排版的html标签,去多余空字符,转换为按缩进输出。
题目链接: pid=4782">http://acm.hdu.edu.cn/showproblem.php?pid=4782
——>>2013年成都区赛题目。当时挺多做不出最后一题的队伍做出了此题,而我,无限WA到比赛结束。。
今天。我AC了。。
题目中有一句话很重要:you shouldn’t change anything of any tag.
想想规范化后的标签,仅仅有两种方式开头,一种是标签 < 开头,还有一种是文本开头。。每种开头分别相应一种结尾。。
于是,读标签<xxx>时一直读到标签尾。
。
读文本时一直读到文本尾。。
最后,就AC吧。。
#include <cstdio>
#include <cstring> const int MAXN = 200;
const char* stop = "</html>"; char ch; bool IsSpace(char ch)
{
return ch == 32 || ch == 9 || ch == 10;
} void PrintSpace(int n)
{
while (n--)
{
putchar(' ');
}
} void RemoveSpace()
{
while ((ch = getchar()) && IsSpace(ch));
} void Enter()
{
putchar('\n');
} void GetEntireTag(char* tag)
{
int len = 0;
tag[len++] = '<';
while ((ch = getchar()) && ch != '>')
{
tag[len++] = ch;
}
tag[len++] = '>';
tag[len] = '\0';
} void OutputTag(const char* tag, const int& spaceCnt)
{
if (tag[1] == '/')
{
PrintSpace(spaceCnt - 1);
}
else
{
PrintSpace(spaceCnt);
}
puts(tag);
} void UpdateSpace(const char* tag, int& spaceCnt)
{
int len = strlen(tag); if (tag[1] != '/' && tag[len - 2] != '/')
{
++spaceCnt;
}
else if (tag[1] == '/')
{
--spaceCnt;
}
} void GetAndOutputEntireText(const int& spaceCnt)
{
PrintSpace(spaceCnt);
putchar(ch);
while ((ch = getchar()) && ch != '<')
{
if (IsSpace(ch))
{
RemoveSpace();
if (ch == '<') break;
else
{
PrintSpace(1);
putchar(ch);
}
}
else
{
putchar(ch);
}
}
Enter();
} int main()
{
int T, kase = 0;
char tag[MAXN]; scanf("%d", &T);
getchar();
while (T--)
{
int spaceCnt = 0; ch = getchar();
printf("Case #%d:\n", ++kase);
while (true)
{
if (IsSpace(ch))
{
RemoveSpace();
}
else if (ch == '<')
{
GetEntireTag(tag);
OutputTag(tag, spaceCnt);
if (strcmp(tag, stop) == 0) break;
UpdateSpace(tag, spaceCnt);
ch = getchar();
}
else
{
GetAndOutputEntireText(spaceCnt);
}
}
} return 0;
}
hdu - 4782 - Beautiful Soup(模拟)的更多相关文章
- HDU 4782 Beautiful Soup --模拟
题意: 将一些分散在各行的HTML代码整理成标签树的形式. 解法: 模拟,具体见代码的讲解. 开始没考虑 '\t' .. 代码: #include <iostream> #include ...
- HDU 4782 Beautiful Soup (模拟+注意细节)
思路就是用栈模拟,不用开实体的栈,直接记一个top指针就行. 说说这题的细节: 1.tag标签里的内容不要动,原样输出.比如<p aa bb cc>,就这样输出就行,不要删空格.题目中说了 ...
- hdu 4782 Beautiful Soupz
模拟.其实这题就是题目比较长而已...读完题目就差不多了.tag直接读就可以了,题目说了不用修改.然后整个题目就是让求text部分,严格按空格分开.注意每行前面空格个数. #include<al ...
- python爬虫之Beautiful Soup的基本使用
1.简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索 ...
- 100天搞定机器学习|Day21 Beautiful Soup
前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...
- 爬虫---Beautiful Soup 反反爬虫事例
前两章简单的讲了Beautiful Soup的用法,在爬虫的过程中相信都遇到过一些反爬虫,如何跳过这些反爬虫呢?今天通过知乎网写一个简单的反爬中 什么是反爬虫 简单的说就是使用任何技术手段,阻止别人批 ...
- 使用Beautiful Soup编写一个爬虫 系列随笔汇总
这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup
开始学习网络数据挖掘方面的知识,首先从Beautiful Soup入手(Beautiful Soup是一个Python库,功能是从HTML和XML中解析数据),打算以三篇博文纪录学习Beautiful ...
- Python爬虫学习(11):Beautiful Soup的使用
之前我们从网页中提取重要信息主要是通过自己编写正则表达式完成的,但是如果你觉得正则表达式很好写的话,那你估计不是地球人了,而且很容易出问题.下边要介绍的Beautiful Soup就可以帮你简化这些操 ...
随机推荐
- xshell连接虚拟机CentOS出现eth0 device not found的解决方法
昨天用xshell连接虚拟机上的centOS老是连接不上,ifconfig eth0 命令显示 device not found.不知道是什么原因... 折腾了好久 网上是各种搜啊 终于找到解决方法了 ...
- Qt笔记——Event
#ifndef MYBUTTON_H #define MYBUTTON_H #include <QPushButton> class MyButton : public QPushButt ...
- 解决使用base64解码太慢的问题,原因是根本就不应该使用此方法解决。
/* 功能:将中文内容的斜杠和双引号转了,方便保存到lua+ssdb中,从SSDB提取出来组装JSON时就不会出错. 作者:黄海 时间:2015-01-31 */ function jsonencod ...
- jQuery.Easyui 三层菜单的实现
有图才有真相: 三层导航菜单JSON 数据格式如下: ].panel('options').title; $('#wnav').accordion('select', t); } // 初始化左 ...
- [ubuntu] service apache2 restart [fail]
$ /etc/init.d/apache2 restart * Restarting web server apache2 [fail] 解决办法4步走: 1. sudo /etc/init.d/ap ...
- []End of 2017OI
今年大概到此为止了,现在这个算是做一个简短的阶段性总结吧 今年打的第一场大概是省赛,当时整个人处于(迷茫,不知道选物理还是选信息+备战中考+持续摸鱼OI颓废)的状态,KMP都不会导致签到题都没有分,然 ...
- 【bzoj1370】【团伙】原来并查集还能这么用?!
(画师当然是武内崇啦) Description 在某城市里住着n个人,任何两个认识的人不是朋友就是敌人,而且满足: 1. 我朋友的朋友是我的朋友: 2. 我敌人的敌人是我的朋友: 所有是朋友的人组成一 ...
- Scala实战高手****第2课:Scala零基础实战入门的第一堂课及如何成为Scala高手
val声明的不可变的战略意义:1.函数式编程中要求值不可变,val天然符合这一特性:2.在分布式系统中,一般都要求值不可变,这样才能够要求分布式系统的设计和实现,同时拥有更高的效率,val声明的内容都 ...
- jdk8新特性
JDK8新特性(JDK8的新特性) * 接口中可以定义有方法体的方法,如果是非静态,必须用default修饰 * 如果是静态的就不用了 class Test { public void run() { ...
- AngularJS的$resource
$http $http服务是基于$q服务的,提供了promise封装,它接受一个配置对象参数,并返回一个promise对象.同时,它还提供了2个方法用来定义Promise回调:success 和 er ...