题意: 将一些分散在各行的HTML代码整理成标签树的形式。

解法: 模拟,具体见代码的讲解。 开始没考虑 '\t' 。。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std; string S,tmp,pre; int main()
{
int t,i,j,cs = ;
scanf("%d",&t);
getchar();
pre = "";
while(t--)
{
S = "";
int fir = ; //是否是第一个子串
while()
{
getline(cin,tmp,'\n');
if(fir) { tmp = pre + tmp; S = S + tmp; fir = ; } //如果是第一个子串,看有没有遗留在前面case的部分
else S = S + " " + tmp;
int ls = S.length();
int lt = tmp.length();
int tag = ;
for(i=;i<=lt-;i++) //读入
{
if(tmp.substr(i,) == "</html>")
{
S = S.substr(,ls-lt+i+);
pre = tmp.substr(i+,lt-i-);
tag = ;
break;
}
}
if(!tag) break;
}
int len = S.length(), deep = ;
printf("Case #%d:\n",cs++);
for(i=;i<len;i++) if(S[i] == '\t') S[i] = ' '; //把Tab转换掉
//cout<<"S = "<<S<<endl;
for(i=;i<len;i++)
{
if(S[i] == '<') //标签部分
{
if(S[i+] != '/') deep++; // 1.开标签,深度+
else deep--; // 2.闭标签,深度-
for(j=;j<deep-(S[i+]=='/'?:);j++) printf(" "); //如果是闭标签,不用减一个空格,否则要建一个空格输出,因为开始就deep++了
if(S[i+] != '/') //如果是类似 <hr/> 的空标签,deep--抵消开标签的deep++
{
for(j=i;S[j]!='>' && j < len;j++);
if(S[j-] == '/') deep--;
}
for(i;S[i]!='>';i++) cout<<S[i]; //输出标签内容
cout<<">"<<endl;
}
else //正文部分,空格地方小心处理
{
string buf = ""; //缓冲部分
int letter = ;
while(S[i] != '<' && i < len)
{
if(S[i] == ' ') //除掉文字前面的空格
{
while(S[i] == ' ' && i < len) i++;
i--;
}
if(S[i] == ' ' && (S[i+] == '<' || !letter)) { i++; continue; } //如果文本全是空格,i++,继续
letter = ; //否则,有字母
buf += S[i]; //推进缓冲区
i++;
}
if(letter) //如果文本有内容
{
for(j=;j<deep;j++) printf(" "); //再打deep个空格
cout<<buf; //输出缓冲区内容
puts("");
}
i--;
}
}
}
return ;
}

HDU 4782 Beautiful Soup --模拟的更多相关文章

  1. hdu - 4782 - Beautiful Soup(模拟)

    题意:输出一堆乱排版的html标签,去多余空字符,转换为按缩进输出. 题目链接:pid=4782">http://acm.hdu.edu.cn/showproblem.php?pid= ...

  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. Linux 安装 Nginx

    1. nginx的安装: 开始学习如何安装nginx,首先安装必要的软件: # yum install libtool # yum install -y gcc-c++ # yum install z ...

  2. 跨平台的 SQL 客户端

    The major update to SQL client was to move to the .NET Core networking libraries instead of the nati ...

  3. redis3.0 集群实战3 - java编程实战

    本文主要描述使用jedis进行redis-cluster操作   jedis jedis是redis官方推荐使用的java redis客户端,github地址为,https://github.com/ ...

  4. winform里面网页显示指定内容

    今天有个同事问了一下我,怎么在winform里面打开网页啊?我们都是基于C/S的开发,很少接触winform,所以我当时就懵了,实在不知道怎么回答,所以索性说不知道.但是我又想了想,这个应该是个很简单 ...

  5. 领域对象模型(domain object model)

    在Play程序中,模型(model)占据了核心地位.它是程序操作的信息的特定领域的表现方式. Martin Fowler这样定义模型: 负责表达业务概念,业务状态信息以及业务规则.尽管保存业务状态的技 ...

  6. Study Tips

    1. 100% width divs not spanning entire width of the browser in webkit. Even Body can not span the en ...

  7. CSS3随内容自动伸缩的背景

    CSS3给我们带来一个非常实用的新属性:border-image,利用这个属性我们可以做出随着内容的增减自动伸缩的背景.废话不多说,看代码! HTML: <ol> <li>第一 ...

  8. DOM应用实例(寻找房祖名)

    在上一篇我讲到了DOM的一些总结,这一次我就用我前几天做的一个游戏demo来讲讲DOM的一些用法吧. 首先简单说说这个游戏,如下图所示(大家忽略样式/(ㄒoㄒ)/~~).当玩家点击开始后,只要选择了正 ...

  9. ALV常用参数详细描述

    调用功能模块: CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_interface_check        = ''               ...

  10. VS2015发布Webservice

    第一步:开启IIs:在控制面板程序——>程序功能——>打开或关闭windows功能,把“Internet信息服务”下面的“FTP服务器”.“Web管理工具”.“万维网服务”全部勾上,然后点 ...