P2395 BBCode转换Markdown 题解

· · 题解

题目链接

题目大意:

给出一段 BBCode 格式的待转换字符串,要求将其转换为 Markdown 格式。

解题思路:

对于输入中的非标签内容直接输出即可;对于一二级标题、斜体、粗体的标签,我们可以直接将其替换 Markdown 格式的;而对于链接和图片,可以将链接保存下来,等到结束标签时在将文字描述一起按格式输出;代码段可以通过逐行输入,并忽略除 [/quote] 以外的标签

几个需要注意的点:

标签中可能有嵌套,可以用栈来维护;链接和图片也有可能嵌套,所以需要另一个栈来维护链接。也可以使用 stack 配合 pair 来同时维护标签和链接。

遇到 Unclosed Mark (可以忽略题目中让我们分两段输出该错误的信息)和 Match Error 的错误时,你的程序应当只输出两个错误之一。可以通过判断栈顶和当前结束标签来判断是否出现 Match Error;通过在格式转换部分全部运行结束之后判断栈是否为空来判断是否出现 Unclosed Mark。注意可能出现栈为空时读入一个结束标签的情况,这种情况属于 Match Error

按照原输入的换行进项输出,除了 [quote] 标签的首尾空行。这些空行不应在你的输出中出现。对于 [quote] 标签不在单独一行的情况,你的程序应该让代码段独立成行。注意,在 [/quote] 标签后应该加上一个换行。如:

输入:

[quote]123[/quote]456

输出

> 123
456

最后附上代码。