传送门

    • HTML新手 - 图片收集者
      • 题目描述
      • 输入描述
      • 输出描述
      • 样例一
        • 输入
        • 输出
  • 题目分析
  • AC代码

HTML新手 - 图片收集者

  • HTML新手 - 图片收集者

时间限制:2秒
空间限制:1024M

之所以在CSDN的题解上添加“の”,是因为CSDN博客标题不让包含“新手”两个字??!


题目描述

春江潮水连海平,海上明月共潮生。
滟滟随波千万里,何处春江无月明!
江流宛转绕芳甸,月照花林皆似霰;
空里流霜不觉飞,汀上白沙看不见。
江天一色无纤尘,皎皎空中孤月轮。
江畔何人初见月?江月何年初照人?
人生代代无穷已,江月年年望相似。
不知江月待何人,但见长江送流水。
白云一片去悠悠,青枫浦上不胜愁。
谁家今夜扁舟子?何处相思明月楼?
可怜楼上月裴回,应照离人妆镜台。
玉户帘中卷不去,捣衣砧上拂还来。
此时相望不相闻,愿逐月华流照君。
鸿雁长飞光不度,鱼龙潜跃水成文。
昨夜闲潭梦落花,可怜春半不还家。
江水流春去欲尽,江潭落月复西斜。
斜月沉沉藏海雾,碣石潇湘无限路。
不知乘月几人归,落月摇情满江树。

—— 小T发现北化似乎没有HTML课程,于是就开启了她的HTML学习之路。

通过学习得知,只需要在html文件中输入

<img src="图片地址">

就能在浏览器中显示该地址对应的图片。

例如,在html文件中输入:

<img src="https://www.baidu.com/img/flexible/logo/pc/result.png">

则在浏览器中将会显示地址为https://www.baidu.com/img/flexible/logo/pc/result.png的图片,显示结果为:

同理,在html文件中输入

<html><body><h1>LetMeFly</h1><img src="https://letmefly.xyz" alt="First Img"><h1>La La La</h1><img src="https://qkiller.xyz" height="80px"><br><img src="https://diary.letmefly.xyz" width="66px" /></body>
</html>

则浏览器中将会显示三张图片,图片地址分别为https://letmefly.xyz、https://qkiller.xyz、https://diary.letmefly.xyz

(不考虑注释等特殊情况)也就是说,只要遇到<img src="???" ***>的情况,就认为发现了一张地址为???的图片,其中***代表其他字符。 请不要把本题想象地过于复杂。

作为一个图片收集爱好者,小T想要知道一个 规范的 html文件中,都包含哪些图片。


输入描述

输入是一个规范的html源文件,且满足:

  1. 文件中不包含注释

  2. 文件中不包含换行的<img>标签

  3. 图片地址均由双引号包括(没有单引号)

  4. 图片地址中不包含双引号

  5. 文件大小不超过2M,且包含不超过1000张图片

  6. 每张图片的地址长度小于1024


输出描述

输出给定html文件中有哪些图片。

第一行一个整数代表源文件中图片的数量n

接下来按顺序输出n行,第i行代表第i个图片的地址


样例一

输入

<html><body><h1>LetMeFly</h1><img src="https://letmefly.xyz" alt="First Img"><h1>La La La</h1><img src="https://qkiller.xyz" height="80px"><br><img src="https://diary.letmefly.xyz" width="66px" /></body>
</html>

输出

3
https://letmefly.xyz
https://qkiller.xyz
https://diary.letmefly.xyz

题目分析

根据题目描述,没有比较复杂的标签的情况。

因此可以采用以下思路:

  1. 先找出所有的img标签的起止位置

    只要遇到了“<img”,我们就认为找到了一个img标签,之后找到其后的第一个“>”,即可分离出这个img标签(<img ****>)

  2. 对于这个img标签,我们只需要找到src属性

    对于一个找到的img标签,我们只需要在标签范围内寻找“src="”之后找到后其后的“"”,二者之间的部分就是图片的地址。


AC代码

#include <stdio.h>
#include <string.h>char s[2 * 1024 * 1024 + 10]; // 输入文件最大2Mchar img[1000][1024]; // 最多1000张图片,图片长度<1024(加上个\0正好≤1024)int findImg4End(int begin) { // Find Img's End,从begin开始寻找img标签的结尾。(因为本题保证img标签不会换行,所以只要出现“<img ”,就可以认为出现了img标签,也就可以认为后面一定会出现闭合的“>”)while (s[begin] != '>')begin++;return begin;
}int main() {int imgNum = 0;while (gets(s)) { // 因题目规定img标签不会跨行,因此一次分析一行即可int l = strlen(s);int analyze2 = 0; // Analyze to,分析到了哪一个字符while (analyze2 < l) {if (analyze2 + 4 < l && s[analyze2] == '<' && s[analyze2 + 1] == 'i' && s[analyze2 + 2] == 'm' && s[analyze2 + 3] == 'g' && s[analyze2 + 4] == ' ') { // 找到了一个img标签的开始int img4End = findImg4End(analyze2 + 5); // 找到一个img标签,范围[analyze2, img4End]// printf("img[%d, %d]\n", analyze2, img4End); //****int srcBegin = analyze2;while (!(s[srcBegin] == 's' && s[srcBegin + 1] == 'r' && s[srcBegin + 2] == 'c' && s[srcBegin + 3] == '=' && s[srcBegin + 4] == '"')) // 输入数据一定能找到srcBegin++;srcBegin = srcBegin + 5; // “"”后面开始int srcEnd = srcBegin;while (s[srcEnd] != '"')srcEnd++;// 图片地址的真正范围是 [srcBegin, srcEnd)// printf("src[%d, %d)\n", srcBegin, srcEnd); //****for (int loc = srcBegin; loc < srcEnd; loc++) {img[imgNum][loc - srcBegin] = s[loc];}img[imgNum++][srcEnd] = '\0';analyze2 = img4End + 1;}else {analyze2++;}}}printf("%d\n", imgNum);for (int i = 0; i < imgNum; i++) {puts(img[i]);}return 0;
}

gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0 编译通过

原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/123068245

2021-2022蓝桥杯寒假集训训练 - 问题 G: HTML新の手 -图片收集者相关推荐

  1. 2021.5.22 2022蓝桥杯练习赛3

    2021.5.22 2022蓝桥杯练习赛3 闲话: 1.就难度而言,本次练习赛题目整体比较简单,要是认真补了前两场的题,应该可以轻松做完4到5题. 2.就体验而言,这场练习赛数据普遍较弱,基本上瞎搞都 ...

  2. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  3. 蓝桥杯 试题 算法训练 无聊的逗 C++ 详解 - 未完善

    题目: 逗志芃在干了很多事情后终于闲下来了,然后就陷入了深深的无聊中.不过他想到了一个游戏来使他更无聊.他拿出n个木棍,然后选出其中一些粘成一根长的,然后再选一些粘成另一个长的,他想知道在两根一样长的 ...

  4. Python【2021年蓝桥杯省赛填空】

    文章目录 Python[2021年蓝桥杯省赛填空] A.卡片 B.直线 C.货物摆放 D.路径 E.回路计数[状态压缩DP] Python[2021年蓝桥杯省赛填空] A.卡片 note = [202 ...

  5. 2022蓝桥杯省赛C++A组初尝试

    前言 耗时三个半小时,看看自己不懂的有多少,以便明确后续备赛2023方向 耗时3个半小时,只拿了18分,没学过,时间再多也做不出来,有奥数那感觉了 据说蓝桥杯省3得做对 2填空 + 2大题(30分), ...

  6. 蓝桥杯:入门训练 序列求和

    蓝桥杯:入门训练 序列求和 问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值. 样例输入 4 样例输出 10 ...

  7. 蓝桥杯:入门训练 圆的面积

    蓝桥杯:入门训练 圆的面积 问题描述 给定圆的半径r,求圆的面积. 输入格式 输入包含一个整数r,表示圆的半径. 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积. 说明:在本 ...

  8. 【2021年蓝桥杯Java-B组国赛题解】

    2021年蓝桥杯Java-B组国赛

  9. 蓝桥杯 试题 算法训练 筛选号码 Java

    蓝桥杯 试题 算法训练 筛选号码Java 算法训练 筛选号码 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 有n个人围成一圈,顺序排号(编号为1到n).从第1个人开始报数(从1到3 ...

  10. 【蓝桥杯真题】2021年蓝桥杯省赛A组题目解析+代码(python组)

    2021年蓝桥杯省赛A组题解(python组) 来自微信公众号:算法梦工厂,二维码见文末. 欢迎加入蓝桥杯备赛群:768245918,获取往届试题,测试数据,算法课程等相关资源. A:卡片 答案:31 ...

最新文章

  1. oracle中before,Oracle中Before和After触发器的例子
  2. H5移动前端性能优化
  3. java set第n位_Java学习路线:float在内存中的存储
  4. PHP开发环境配置:安装与配置Apache、PHP、MySQL、PhpMyAdmin
  5. Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】
  6. 华科计算机专硕英语几,考研考华科计算机考数学几英语几啊,另外考华科数..._考研_帮考网...
  7. 无法通过ip地址连接其它电脑的数据库,但是又可以ping通,错的不是配置,而是差了一个步骤
  8. 普通循环和numpy速率对比
  9. 功能强大的云打印组件-开始使用
  10. 【Windows】添加开机启动项
  11. HFT-CNN:层级多标签分类,让你的模型多学习几次
  12. keil 5(C51)下载安装
  13. Tableau——其他参考方法
  14. 生物医学工程实用在线工具
  15. 思维导图的10种类型有哪些?思维导图结构详解
  16. 400GE燎原前夜,智能IP网络的核心路由器巅峰际会
  17. 打印正六边形(C语言)
  18. 怎么从身份证号码批量提取出生年月日?
  19. unity再战PBR材质流程与材质制作实践
  20. 差旅安全,你了解多少?

热门文章

  1. uniapp如何使用uview中的loadmore上拉加载
  2. 【OFDM】AWGN 信道下 BPSK 调制 (卷积码) 性能对比仿真实验 (Matlab 实现)
  3. linux查询电脑mac地址,查看MAC地址的几种方法汇总
  4. c语言中大写a对应的数字,123456789a
  5. [听风]TBC单体插件数据统计Recount
  6. 流媒体后视镜方案关键技术--电子防眩目
  7. @Retryable和@Recover的使用
  8. Unity Shader 法线贴图原理解析
  9. 计算机点击管理无效,我的电脑有任务管理器但是点击却没反应是怎么回事
  10. 谷歌工程师深度技术分析“为什么ios比android流畅