CCF 201703-3 Markdown
问题描述
| 试题编号: | 201703-3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 试题名称: | Markdown | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 时间限制: | 1.0s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 内存限制: | 256.0MB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 问题描述: |
问题描述
Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档。例如以下这段文本就是用 Markdown 的语法写成的:
这些用 Markdown 写成的文本,尽管本身是纯文本格式,然而读者可以很容易地看出它的文档结构。同时,还有很多工具可以自动把 Markdown 文本转换成 HTML 甚至 Word、PDF 等格式,取得更好的排版效果。例如上面这段文本通过转化得到的 HTML 代码如下所示: 本题要求由你来编写一个 Markdown 的转换工具,完成 Markdown 文本到 HTML 代码的转换工作。简化起见,本题定义的 Markdown 语法规则和转换规则描述如下: 输入格式
输入由若干行组成,表示一个用本题规定的 Markdown 语法撰写的文档。
输出格式
输出由若干行组成,表示输入的 Markdown 文档转换成产生的 HTML 代码。
样例输入
# Hello
Hello, world! 样例输出
<h1>Hello</h1>
<p>Hello, world!</p> 评测用例规模与约定
本题的测试点满足以下条件:
●本题每个测试点的输入数据所包含的行数都不超过100,每行字符的个数(包括行末换行符)都不超过100。 ●除了换行符之外,所有字符都是 ASCII 码 32 至 126 的可打印字符。 ●每行行首和行末都不会出现空格字符。 ●输入数据除了 Markdown 语法所需,内容中不会出现 `#`、`*`、`_`、`[`、`]`、`(`、`)`、`<`、`>`、`&` 这些字符。 ●所有测试点均符合题目所规定的 Markdown 语法,你的程序不需要考虑语法错误的情况。 每个测试点包含的语法规则如下表所示,其中“√”表示包含,“×”表示不包含。
提示
由于本题要将输入数据当做一个文本文件来处理,要逐行读取直到文件结束,C/C++、Java 语言的用户可以参考以下代码片段来读取输入内容。
|
#include <bits/stdc++.h>
using namespace std;
const int MAX=;
string strs[MAX]; void output(string str)
{
int len=str.length();
for(int i=;i<len;i++)
{
if(str[i]=='_')
{
int r=str.find('_',i+);
string tmp="<em>"+str.substr(i+,r-i-)+"</em>";
output(tmp);
i=r;
}
else if(str[i]=='[')
{
int r=str.find(']',i+);
string text=str.substr(i+,r-i-); int l=str.find('(',r+);
int linkr=str.find(')',r+); string link=str.substr(l+,linkr-l-);
string tmp="<a href=\""+link+"\">"+text+"</a>"; output(tmp); i=linkr;
}
else
printf("%c",str[i]);
}
} void solve_h()
{
int len=strs[].length(); int pos=len,cnt=;
for(int i=;i<len;i++)
{
if(strs[][i]=='#')
cnt++;
if(strs[][i]!='#'&&strs[][i]!=' ')
{
pos=i;
break;
}
} cout<<"<h"<<cnt<<">";
output(strs[].substr(pos));
cout<<"</h"<<cnt<<">"<<endl;
} void solve_p(int cnt)
{
cout<<"<p>";
for(int i=;i<cnt;i++)
{
output(strs[i]); if(i==cnt-)
cout<<"</p>"; cout<<endl;
}
} void solve_l(int cnt)
{
cout<<"<ul>"<<endl; for(int i=;i<cnt;i++)
{
int len=strs[i].length();
int pos=len,cnt=; for(int j=;j<len;j++)
if(strs[i][j]!=' ')
{
pos=j;
break;
} cout<<"<li>";
output(strs[i].substr(pos));
cout<<"</li>"<<endl;
}
cout<<"</ul>"<<endl;
} int main()
{
//freopen("in.txt","r",stdin);
std::string line; int cnt=;
while(getline(std::cin,line))
{
if(line=="")
{
if(cnt==)
continue; if(strs[][]=='#')
solve_h();
else if(strs[][]=='*')
solve_l(cnt);
else
solve_p(cnt); cnt=;
continue;
} strs[cnt++]=line;
} if(cnt)
{
if(strs[][]=='#')
solve_h();
else if(strs[][]=='*')
solve_l(cnt);
else
solve_p(cnt);
}
return ;
}
CCF 201703-3 Markdown的更多相关文章
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- CCF CSP 201703
CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...
- 【CCF】 Markdown 模拟
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- markdown绘图插件----mermaid简介
作者:黄永刚 mermaid简介 当撰写文档的时候,对于流程图的生成大多使用Visio等繁重的工具,没有一种轻便的工具能够画图从而简化文档的编写,就像markdown那样. mermaid解决这个痛点 ...
- Markdown语法整理
标题 语法格式:'#'+'空格'+'文本',一共6级 # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 斜体 语法格式:1个星号包裹,我 ...
- CCF计算机职业资格认证考试题解
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...
- Markdown教程<2> mermaid图形绘制(1)
Markdown教程<2> mermaid图形绘制(1) 博客园中的markdown编辑器同时支持mermaid图表引擎与tex公式引擎,可以使用mermaid直接画出流程图,时序图,甘特 ...
- Markdown插入图表
链接:https://www.jianshu.com/p/3cf83d22dd3d Markdown图表语法 本文介绍如何用Markdown的mermaid等语法插入时序图.流程图.甘特图 如果是想学 ...
- CSDN中Markdown编辑器使用方法
Markdown编辑器 如果想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识. 新的改变 CSDN中Markdown编辑器进行了一些功能拓展与语法支 ...
随机推荐
- lua53编译
#下载lua包lua-5.3.5 #vs2017新建个空工程,删除lua.c,luac,c,设置配置类型 动态库.dll #编译完成
- python线程池/进程池创建
进程池 import time from concurrent.futures import ProcessPoolExecutor def task(arg): time.sleep(2) prin ...
- Virtualbox报错------>make sure the kernel module has been loaded successfully
错误描述 很久没有用virtualbox了,今天打算在virtualbox上安装一个Ubuntu系统的时候,新建好Ubuntu后启动的时候,直接报错: Cannot access the kernel ...
- MySQL数据库(3)- 完整性约束、外键的变种、单表查询
一.完整性约束 在创建表时候,约束条件和数据类型的宽度都是可选参数. 作用:用于保证数据的完整性和一致性. 1.not null(不可空)与default 示例一:插入一个空值,如下: mysql&g ...
- spring整合问题分析之-Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
1.异常分析 Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into ...
- idea导入项目出现Unable to import maven project: See logs for details提示(转载)
摘要: 从git上面check多工程项目后,maven不能正常下载相应的依赖,最后查询国外网站,找出错误原因.按照此步骤,可以自动配置好每个工程的module. 删除项目根目录下.idea文件夹 关闭 ...
- java 多线程 day01 创建线程
线程,即代码的执行路径java 面向对象编程.所以线程在java中也是用对象来表示的,创建线程对象的类就是 Thread如下代码即开启一个新的线程,通过线程对象的start方法,即可启动线程 Thre ...
- 01 javaSe 01 抽象类和接口
抽象类 接口 目录(?)[-] 1 抽象类与接口是面向对象思想层面概念不是程序设计语言层面概念 2 抽象类是本体的抽象接口是行为的抽象 3 C中抽象类与接口的探讨 目录(?)[+] ...
- JS操作时间 - UNIX时间戳简单介绍
准备知识 GMT(Greenwich Mean Time) - 格林尼治时间.UTC(Universal Time Code) - 国际协调时间.PST(Pacific Standard Time,太 ...
- Java io流详解一
原文地址http://www.cnblogs.com/xdp-gacl/p/3634409.html java基础学习总结——流 一.JAVA流式输入/输出原理