-->
当前位置:首页 > 题库 > 正文内容

编程题:Markdown渲染器v1

Luz3年前 (2022-04-08)题库732
Markdown是一种轻量级标记语言,由John Gruber和Aaron Swartz在2004年创造。通过易读易写的纯文本格式编写Markdown文件,可以方便地转换成HTML、PDF、PPT等格式。很多云笔记、代码托管等网站支持用Markdown格式写文档,PTA题面也是用Markdown写的。完成本题后您将立即成为Markdown行家。

Markdown语法很简单,大约只有12类。V1版只需实现以下功能:

- **标题**(heading):**行首为1到6个#字符、后接一个空格**,表示一至六级标题,翻译为<h1>...</h1>结构。
- 标题只允许一行(不用考虑多行)。
- 标题与其他结构必须由一个空行隔开。
- 标题内容保持原样(标题中无其他格式)
- **水平线**(horizontal rule):单独一行的---为水平线,翻译为<hr>标签。
- 水平线与其他结构必须由一个空行隔开。
- **段落**(paragraph):由空行分隔的**多行文本**,被翻译为<p>...</p>段落结构。
- 除末行以外,段落中的行需要追加<br>表示换行。
- **无序列表**(unordered list):**以-开头,后接一个空格**,后续**单行文本**。翻译为:

html
<ul>
<li> aaa
<li> bbb
</ul>


- 连续的列表项汇集在同一<ul>...</ul>结构中。
- 只需实现单级列表。
- 列表与其他结构必须由一个空行隔开。
- **文本**中可有以下修饰:
- **强调**(emphasizing):被**1个星号包围**的文本表现为斜体,翻译为<em>...</em>结构。
- **重要**(strong importance):被**2个星号包围**的文本表现为粗体,翻译为<strong>...</strong>结构。
- **至关重要**:被**3个星号包围**的文本表现为粗斜体,翻译为<strong><em>...</em></strong>结构。
- **代码**(code):被**反引号**\包围的视为代码,用等宽字体表示,翻译为<code>...</code>结构。

任务:解析Markdown基本结构,并转换为HTML。
目的:掌握Markdown常用语法;练习HTML后端生成方法。
提示:
- 逐步实现功能。
- 标题、水平线、段落、列表都是以1个空行作为分隔,可以视为块结构。
- 在划分出块结构后,再修饰行中的文本。

#### 输入规格

- 整行读入并转换,直到EOF为止。
- 这题开始有Unicode字符,用UTF-8编码就好,无需特殊处理。
- 输入合乎规范,无需考虑容错。

#### 输出规格

- HTML格式文本。
- 可以重定向到HTML文件,用浏览器打开查看。


#### 样例输入

in
# 一级标题

## 二级标题

### 三级标题

#### 四级标题

##### 五级标题

###### 六级标题

---

段落1行1

段落2行1
段落2行2

- 列表A1

- 列表B1
- 列表B2

*强调(斜体)*

**着重(粗体)**

***着重强调(粗斜体)***

a ^= b; b ^= a; a ^= b;


#### 样例输出

out
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Markdown</title>
</head>
<body>
<h1>一级标题</h1>

<h2>二级标题</h2>

<h3>三级标题</h3>

<h4>四级标题</h4>

<h5>五级标题</h5>

<h6>六级标题</h6>

<hr>

<p>段落1行1</p>

<p>段落2行1<br>
段落2行2</p>

<ul>
<li>列表A1</li>
</ul>

<ul>
<li>列表B1</li>
<li>列表B2</li>
</ul>

<p><em>强调(斜体)</em></p>

<p><strong>着重(粗体)</strong></p>

<p><strong><em>着重强调(粗斜体)</em></strong></p>

<p><code>a ^= b; b ^= a; a ^= b;</code></p>

</body>
</html>


#### 样例解释

无发可说。





答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。