HDU 4782 Beautiful Soup (模拟+注意细节)
思路就是用栈模拟,不用开实体的栈,直接记一个top指针就行。
说说这题的细节:
1.tag标签里的内容不要动,原样输出。比如<p aa bb cc>,就这样输出就行,不要删空格。题目中说了you shouldn’t change anything of any tag.
2.标签之外的文本,文本内的空白符(空格,tab,回车),相邻单词之间用一个空格分隔开。文本与标签相邻的地方,不要有多余的空白符,就是说,文本与标签相邻的地方,除了一个回车以及缩进用的空白符之外,不要有任何空白符。
3.上一个case的</html>跟下一个case的<html>有可能在同一行,并且第一个<html>之前有可能有空白符
4.每行结尾不要有多余的空格
5.不要有空行
以下给出几组数据,空格用<SPACE>表示,tab键用<TAB>表示:
Input:
<TAB><html> <body>
<h1>ACM
ICPC</h1>
<p>Hello<br/>World</p>
</body></html>
<html> <body><p><TAB>
Asia Chengdu Regional </p><TAB>
<p class="icpc">
ACM-ICPC</p></body></html>
<html> <TAB>
<TAB>
</html><TAB><html>
<p>
<TAB>
aa bb cc dafdadgsdfsa<TAB> afd
</p>
<TAB> </html><TAB><TAB>
<html><body aslfja fdsafs<TAB>fdsafsa ><bb/></body></html>
Output
Case #:
<html>
<body>
<h1>
ACM ICPC
</h1>
<p>
Hello
<br/>
World
</p>
</body>
</html>
Case #:
<html>
<body>
<p>
Asia Chengdu Regional
</p>
<p class="icpc">
ACM-ICPC
</p>
</body>
</html>
Case #:
<html>
</html>
Case #:
<html>
<p>
aa bb cc dafdadgsdfsa afd
</p>
</html>
Case #:
<html>
<body aslfja fdsafs fdsafsa >
<bb/>
</body>
</html>
代码
#include <cstdio>
#include <cstring>
#include <cstdlib> #define IN 0
#define OUT 1 #define START 0
#define END 1 using namespace std; const int MAXN = ; char str[MAXN];
char tmp[MAXN];
char tag[MAXN]; bool CheckEnd( char *s, int len )
{
if ( s[len-] == '<' && s[len-] == '/' && s[len-] == 'h'
&& s[len-] == 't' && s[len-] == 'm' && s[len-] == 'l'
&& s[len] == '>' )
return true;
return false;
} int chuli( char *s, int len )
{
int i = , j = ;
while ( i < len && (s[i] == ' ' || s[i] == || s[i] == '\n') ) ++i;
while ( i < len )
{
s[j] = s[i];
if ( s[i] == '>' )
{
++i;
while ( s[i] == ' ' || s[i] == || s[i] == '\n' ) ++i;
}
else ++i;
++j;
}
s[j] = '\0';
return j;
} int DeleteSpace( char *s, int len )
{
int i = , j = ;
while ( i < len )
{
if ( s[i] == '<' )
{
if ( j - >= && ( s[j - ] == ' ' || s[j - ] == ) ) s[j - ] = s[i++];
while ( i < len && s[i] != '>' )
{
s[j++] = s[i++];
}
s[j++] = s[i++];
}
else if ( s[i] == ' ' || s[i] == )
{
s[j++] = ' ';
while ( i < len && ( s[i] == ' ' || s[i] == ) ) ++i;
}
else s[j++] = s[i++];
}
s[j] = '\0';
return j;
} void solved( char* s, int len )
{
//puts(s);
int top = ;
int i = ;
while ( i < len )
{
if ( s[i] == '<' )
{
int j = ;
while ( s[i] != '>' )
{
tag[j++] = s[i++];
}
tag[j++] = s[i++];
tag[j] = '\0'; if ( tag[] == '/' )
{
--top;
for ( int k = ; k < top; ++k )
putchar(' ');
}
else
{
for ( int k = ; k < top; ++k )
putchar(' ');
++top;
}
if ( tag[j-] == '/' ) --top;
puts(tag);
}
else
{
for ( int k = ; k < top; ++k ) putchar(' ');
while ( i < len && s[i] != '<' )
{
putchar(s[i]);
++i;
}
puts("");
}
}
return;
} int main()
{
int T, cas = ;
//freopen( "in.txt", "r", stdin );
//freopen( "s.txt", "w", stdout );
scanf( "%d", &T );
printf( "Case #%d:\n", ++cas );
int len = ;
while ( gets(tmp) != NULL )
{
strcpy( &str[len], tmp );
len += strlen(tmp);
str[len++] = ' ';
}
str[len - ] = '\0';
//puts(str); int j = ;
for ( int i = ; i < len; )
{
tmp[j++] = str[i++];
if ( j > && CheckEnd( tmp, j - ) )
{
tmp[j] = '\0';
--T;
//printf( "T = %d\n", T );
solved( tmp, DeleteSpace( tmp, chuli( tmp, j ) ) );
j = ;
if ( T ) printf( "Case #%d:\n", ++cas );
}
}
return ;
}
HDU 4782 Beautiful Soup (模拟+注意细节)的更多相关文章
- HDU 4782 Beautiful Soup --模拟
题意: 将一些分散在各行的HTML代码整理成标签树的形式. 解法: 模拟,具体见代码的讲解. 开始没考虑 '\t' .. 代码: #include <iostream> #include ...
- hdu - 4782 - Beautiful Soup(模拟)
题意:输出一堆乱排版的html标签,去多余空字符,转换为按缩进输出. 题目链接:pid=4782">http://acm.hdu.edu.cn/showproblem.php?pid= ...
- hdu 4782 Beautiful Soupz
模拟.其实这题就是题目比较长而已...读完题目就差不多了.tag直接读就可以了,题目说了不用修改.然后整个题目就是让求text部分,严格按空格分开.注意每行前面空格个数. #include<al ...
- 推荐一些python Beautiful Soup学习网址
前言:这几天忙着写分析报告,实在没精力去研究django,虽然抽时间去看了几遍中文文档,还是等实际实践后写几篇操作文章吧! 正文:以下是本人前段时间学习bs4库找的一些网址,在学习的可以参考下,有点多 ...
- 转:Beautiful Soup
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时 ...
- python爬虫之Beautiful Soup的基本使用
1.简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索 ...
- Beautiful Soup 学习手册
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式 快速开始 下面的一段HTML代码将作为例 ...
- Beautiful Soup 4.2.0 文档
Beautiful Soup 4.2.0 文档 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方 ...
- 100天搞定机器学习|Day21 Beautiful Soup
前情回顾 机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机 ...
随机推荐
- 互联网高级Java面试总结
前不久刚换了单位,这段时间抽出时间来总结一下. 本人渣本毕业四年,无大厂工作经验,出来面高级Java. 上家单位是一个知名互联网平台,但是体量不大的小公司(5线互联网公司),但就是出名(职场人都知道~ ...
- Python基础—15-正则表达式
正则表达式 应用场景 特定规律字符串的查找替换切割等 邮箱格式.URL.IP等的校验 爬虫项目中,特定内容的提取 使用原则 只要是能够使用字符串函数解决的问题,就不要使用正则 正则的效率较低,还会降低 ...
- Select 语句执行顺序以及如何提高Oracle 基本查询效率
今天把这几天做的练习复习了一下,不知道自己写得代码执行的效率如何以及要如何提高,于是乎上网开始研究一些材料,现整理如下: 首先,要了解在Oracle中Sql语句运行的机制.以下是sql语句的执行步骤: ...
- cornerstone提示“SQLite-database disk image is malformed”
当点击workingCopy时错误如下 google了一下,有是有解决的办法,可是这些都是直接使用sqlite时产生的问题. sqlite错误 The database disk image is m ...
- ionic 安装步骤
安装ionic和cordova 1,需要首先安装好nodejs,然后通过npm来安装 npm install -g cordova ionic 注意:可能遇到的错误:Error: Cannot fi ...
- 原生js方面的兼容性问题
1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题 我们都知道js通过style不可以获取行外样式,当我们需要获取行外样式时: 我们一般通过这两 ...
- ubuntu系统下的docker
官网:https://www.docker.com/ 相关资料:1.Docker入门教程 http://dockone.io/article/1112.Docker_百度百科 http://baike ...
- Linux系统运维基础测试题
1 Linux运维基础测试题(第一关) 通过这段时间学习Linux基础命令,为了检测自己对Linux基础命令掌握的情况,从网上整理13到测试题,并将其整理出来供大家参考学习. 1.1 习题 ...
- while,格式化输出
1. while循环: while 条件: 代码块(循环体) num=1 while num<=5: print(num) num+=1 break:结束循环;停止当前本层循环 continue ...
- stm32+lwip(四):网页服务器测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...