201703-3 Markdown
来源:互联网 发布:java时间相减得到小时 编辑:程序博客网 时间:2024/06/03 16:44
问题描述
Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档。例如以下这段文本就是用 Markdown 的语法写成的:
这些用 Markdown 写成的文本,尽管本身是纯文本格式,然而读者可以很容易地看出它的文档结构。同时,还有很多工具可以自动把 Markdown 文本转换成 HTML 甚至 Word、PDF 等格式,取得更好的排版效果。例如上面这段文本通过转化得到的 HTML 代码如下所示:
本题要求由你来编写一个 Markdown 的转换工具,完成 Markdown 文本到 HTML 代码的转换工作。简化起见,本题定义的 Markdown 语法规则和转换规则描述如下:
●区块:区块是文档的顶级结构。本题的 Markdown 语法有 3 种区块格式。在输入中,相邻两个区块之间用一个或多个空行分隔。输出时删除所有分隔区块的空行。
○段落:一般情况下,连续多行输入构成一个段落。段落的转换规则是在段落的第一行行首插入 <p>
,在最后一行行末插入 </p>
。
○标题:每个标题区块只有一行,由若干个 #
开头,接着一个或多个空格,然后是标题内容,直到行末。#
的个数决定了标题的等级。转换时,# Heading
转换为 <h1>Heading</h1>
,## Heading
转换为 <h2>Heading</h2>
,以此类推。标题等级最深为 6。
○无序列表:无序列表由若干行组成,每行由 *
开头,接着一个或多个空格,然后是列表项目的文字,直到行末。转换时,在最开始插入一行 <ul>
,最后插入一行 </ul>
;对于每行,* Item
转换为 <li>Item</li>
。本题中的无序列表只有一层,不会出现缩进的情况。
●行内:对于区块中的内容,有以下两种行内结构。
○强调:_Text_
转换为 <em>Text</em>
。强调不会出现嵌套,每行中 _
的个数一定是偶数,且不会连续相邻。注意 _Text_
的前后不一定是空格字符。
○超级链接:[Text](Link)
转换为 <a href="Link">Text</a>
。超级链接和强调可以相互嵌套,但每种格式不会超过一层。
输入格式
输入由若干行组成,表示一个用本题规定的 Markdown 语法撰写的文档。
输出格式
输出由若干行组成,表示输入的 Markdown 文档转换成产生的 HTML 代码。
样例输入
Hello
Hello, world!
样例输出
Hello
Hello, world!
评测用例规模与约定
本题的测试点满足以下条件:
●本题每个测试点的输入数据所包含的行数都不超过100,每行字符的个数(包括行末换行符)都不超过100。
●除了换行符之外,所有字符都是 ASCII 码 32 至 126 的可打印字符。
●每行行首和行末都不会出现空格字符。
●输入数据除了 Markdown 语法所需,内容中不会出现 #
、*
、_
、[
、]
、(
、)
、<
、>
、&
这些字符。
●所有测试点均符合题目所规定的 Markdown 语法,你的程序不需要考虑语法错误的情况。
每个测试点包含的语法规则如下表所示,其中“√”表示包含,“×”表示不包含。
字符串处理,注意网址和强调的嵌套,似乎没有把另一半符号也去嵌套进去的情况
查了下拷贝一部分字符串的方法:
string t(s,pos1,pos2),不过这里用不着……
#include <iostream>#include <stdio.h>#include <map>#include <set>#include <queue>#include <algorithm>#include <vector>#include <math.h>#include <iterator>#include <string.h>using namespace std;typedef long long ll;int mo[4][2]={0,1,1,0,0,-1,-1,0};const int MAXN=0x3f3f3f3f;const int sz=1005;string s[105],ans[105];void get(int x,int k,int p,int ed){ int i; int em=-1,l1,l2,r1,r2; for(i=p;i<ed;i++){ if(s[x][i]=='_'){ while(s[x][i]=='_') i++; ans[k]+="<em>"; em=i; for(int j=i;j<ed;j++){ if(s[x][j]=='_'){ get(x,k,em,j); ans[k]+="</em>"; i=j; while(s[x][i+1]=='_') i++; break; } } }else if(s[x][i]=='['){ ans[k]+="<a href=\""; l1=i+1; int j; for(j=i;j<ed;j++){ if(s[x][j]==']'){ r1=j; j++; break; } } for(;j<ed;j++){ if(s[x][j]=='('){ l2=j+1; } if(s[x][j]==')'){ r2=j; break; } } i=j; get(x,k,l2,r2); ans[k]+="\">"; get(x,k,l1,r1); ans[k]+="</a>"; }else{ ans[k]+=s[x][i]; } }}int main(){ //freopen("r.txt","r",stdin); int n,m,cot,t,k,lt,pt; cot=0; lt=0; k=0; pt=0; while(getline(cin,s[cot])){ cot++; } for(int i=0;i<cot;i++){ if(s[i].length()==0) continue; if(s[i][0]=='#'){ t=1; int j; for(j=1;j<s[i].length();j++){ if(s[i][j]=='#'){ t++; }else{ break; } } for(;j<s[i].length();j++){ if(s[i][j]!=' ') break; } ans[k]+="<h"; char c='0'+t; ans[k]+=c; ans[k]+='>'; get(i,k,j,s[i].length()); ans[k]+="</h"; ans[k]+=c; ans[k]+='>'; k++; }else if(s[i][0]=='*'){ if(!lt){ lt=1; ans[k]+="<ul>"; k++; } int j=1; for(;j<s[i].length();j++){ if(s[i][j]!=' ') break; } ans[k]+="<li>"; get(i,k,j,s[i].length()); ans[k]+="</li>"; k++; if(i+1==cot||s[i+1][0]!='*'){ lt=0; ans[k]+="</ul>"; k++; } }else{ if(!pt){ pt=1; ans[k]+="<p>"; } get(i,k,0,s[i].length()); if(i+1==cot||s[i+1].length()==0){ pt=0; ans[k]+="</p>"; } k++; } } for(int i=0;i<k;i++){ cout<<ans[i]<<endl; } return 0;}
- CCF 201703-3 Markdown
- 201703-3 Markdown ccf
- ccf 201703-3 Markdown
- 201703-3 Markdown
- CCF认证201703-3 Markdown
- CCF-CSP认证题201703-3 Markdown
- ccf 201703-3 Markdown ( java)
- CCF-CSP Markdown JAVA 201703-3
- CCF-201703-3 MarkDown Java满分解
- CCF CSP Markdown JAVA 201703-3
- 3分钟掌握Markdown
- markdown语法测试3
- Sublime 3 Markdown插件
- 3、markdown字体颜色
- CCF201703-3 Markdown
- CCF201703-3Markdown
- Markdown
- markdown
- 讲给Android程序员看的前端教程(19)——display属性
- 【OpenCV】图片对比度和亮度
- node处理get、post 以及跨域问题 处理 的实例代码
- Java Integer为什么要使用equals而不会==比较
- caffe平台搭建可能遇到的bug及解决方法
- 201703-3 Markdown
- TabLayout+Fragment+ViewPager顶部菜单可滑动切换
- 理解MySQL——索引与优化
- 浏览器模式与文本模式
- 如何自定义QtWebEngineProcess.exe的路径和名字
- Python一些特别的语法(二)
- Javascript定义类(class)的三种方法
- VM12.0安装Ubuntu16.04+anaconda+pycharm+tensowflow
- servlet生命周期