题意:输出一堆乱排版的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(模拟)的更多相关文章

  1. HDU 4782 Beautiful Soup --模拟

    题意: 将一些分散在各行的HTML代码整理成标签树的形式. 解法: 模拟,具体见代码的讲解. 开始没考虑 '\t' .. 代码: #include <iostream> #include ...

  2. HDU 4782 Beautiful Soup (模拟+注意细节)

    思路就是用栈模拟,不用开实体的栈,直接记一个top指针就行. 说说这题的细节: 1.tag标签里的内容不要动,原样输出.比如<p aa bb cc>,就这样输出就行,不要删空格.题目中说了 ...

  3. hdu 4782 Beautiful Soupz

    模拟.其实这题就是题目比较长而已...读完题目就差不多了.tag直接读就可以了,题目说了不用修改.然后整个题目就是让求text部分,严格按空格分开.注意每行前面空格个数. #include<al ...

  4. python爬虫之Beautiful Soup的基本使用

    1.简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索 ...

  5. 100天搞定机器学习|Day21 Beautiful Soup

    前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...

  6. 爬虫---Beautiful Soup 反反爬虫事例

    前两章简单的讲了Beautiful Soup的用法,在爬虫的过程中相信都遇到过一些反爬虫,如何跳过这些反爬虫呢?今天通过知乎网写一个简单的反爬中 什么是反爬虫 简单的说就是使用任何技术手段,阻止别人批 ...

  7. 使用Beautiful Soup编写一个爬虫 系列随笔汇总

    这几篇博文只是为了记录学习Beautiful Soup的过程,不仅方便自己以后查看,也许能帮到同样在学习这个技术的朋友.通过学习Beautiful Soup基础知识 完成了一个简单的爬虫服务:从all ...

  8. 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(1): 基础知识Beautiful Soup

    开始学习网络数据挖掘方面的知识,首先从Beautiful Soup入手(Beautiful Soup是一个Python库,功能是从HTML和XML中解析数据),打算以三篇博文纪录学习Beautiful ...

  9. Python爬虫学习(11):Beautiful Soup的使用

    之前我们从网页中提取重要信息主要是通过自己编写正则表达式完成的,但是如果你觉得正则表达式很好写的话,那你估计不是地球人了,而且很容易出问题.下边要介绍的Beautiful Soup就可以帮你简化这些操 ...

随机推荐

  1. 云平台服务运行情况检测脚本V0.1

    1.准备Python3环境 yum groupinstall "Development tools" -y yum install zlib-devel bzip2-devel o ...

  2. Go语言,用原子函数atomic避免资源竞争

    下一步应该是互斥锁了. package main import ( "fmt" "runtime" "sync" "sync/at ...

  3. AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792

    由乃与大母神原型和偶像崇拜 思路: 逆元+线段树维护和+线段树维护平方和+线段树维护最大最小值: 代码: #include <bits/stdc++.h> using namespace ...

  4. [mysql] 表去重

    select *, count(distinct content) from comment2 group by content

  5. 【wordpress】 $wpdb 应用实例

    <?php require_once('e:/php/wordpress/wp-blog-header.php');//注释掉这一句就出错了 global $wpdb; $a = $wpdb-& ...

  6. HDU 6336.Problem E. Matrix from Arrays-子矩阵求和+规律+二维前缀和 (2018 Multi-University Training Contest 4 1005)

    6336.Problem E. Matrix from Arrays 不想解释了,直接官方题解: 队友写了博客,我是水的他的代码 ------>HDU 6336 子矩阵求和 至于为什么是4倍的, ...

  7. HDU 6319.Problem A. Ascending Rating-经典滑窗问题求最大值以及COUNT-单调队列 (2018 Multi-University Training Contest 3 1001)

    2018 Multi-University Training Contest 3 6319.Problem A. Ascending Rating 题意就是给你长度为k的数列,如果数列长度k<n ...

  8. 最小生成树 (Minimum Spanning Tree,MST) --- Prim算法

    本文链接:http://www.cnblogs.com/Ash-ly/p/5409904.html 普瑞姆(Prim)算法: 假设N = (V, {E})是连通网,TE是N上最小生成树边的集合,U是是 ...

  9. 树链剖分【p2568】[SDOI2011]染色

    Description 给定一颗有\(n\)个节点的无根树和\(m\)个操作,操作有\(2\)类: 1.将节点\(a\)到节点\(b\)路径上所有点染成颜色\(c\) 2.询问节点\(a\)到节点\( ...

  10. 杭电oj 1000

    今天开始和一个认识的学弟刷题. 学弟是个大牛,我还是个菜鸟.嘿嘿. 杭电第一题我就wrong了好几次. #include <iostream> using namespace std; i ...