ccf-20170303--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;
string Int_to_String(int n){
stringstream ss;
ss<<n;
return ss.str();
}
void Operator_Spec(string & s){
int flagEm=0;
int index;
while((index=s.find('_'))!=string::npos){
if(flagEm==0){
s.replace(index,1,"<em>");
flagEm=1;
}else{
s.replace(index,1,"</em>");
flagEm=0;
}
}
while(s.find("[")!=string::npos&&s.find("]")!=string::npos&&s.find("(")!=string::npos&&s.find(")")!=string::npos){
string text="",link="";
text=s.substr(s.find("[")+1,s.find("]")-s.find("[")-1);
link=s.substr(s.find("(")+1,s.find(")")-s.find("(")-1);
//<a href="Link">Text</a>
string href="<a href=\""+link+"\">"+text+"</a>";
s.replace(s.find("["),s.find(")")-s.find("[")+1,href);
}
}
int main(){
string temps="";
int flagUl=0;//标记是否出现ul例如列表
int flagP=0;//用于标记p段落
string result="";
string Total_Result="";
while(getline(cin,temps)){
if(temps!=""){
if(temps[0]=='#'){
int headerCount=0;
int i=0;
while(temps[i]=='#'){
i++;
}
headerCount=i;
result="<h"+Int_to_String(headerCount)+">";
while(temps[i]==' '){
i++;
}
result=result+temps.substr(i,temps.length()-i);
result+="</h"+Int_to_String(headerCount)+">";
}else if(temps[0]=='*'){
if(flagUl==0){
result+="<ul>\n";
flagUl=1;
}
int i=1;
while(temps[i]==' '){
i++;
}
result=result+"<li>"+temps.substr(i,temps.length()-i)+"</li>"+"\n";
}else{
//cout<<"flagP:"<<flagP<<endl;
if(flagP==0){
result+="<p>";
flagP=1;
}
result+=temps+"\n";
}
}else{
if(flagUl==0&&flagP==0){
Operator_Spec(result);
//Total_Result+=result;
cout<<result<<endl;
result="";
}else{
if(flagUl==1){
Operator_Spec(result);
//Total_Result=Total_Result+result+"</ul>";
cout<<result<<"</ul>"<<endl;
flagUl=0;
result="";
}
if(flagP==1){
result=result.substr(0,result.length()-1);
Operator_Spec(result);
//Total_Result=Total_Result+result+"</p>";
cout<<result+"</p>"<<endl;
flagP=0;
result="";
}
}
}
// temps="";
}
if(temps!=""){//最后还会遗留一个区块,不能忽略这种情况
if(temps[0]=='#'){
int headerCount=0;
int i=0;
while(temps[i]=='#'){
i++;
}
headerCount=i;
result="<h"+Int_to_String(headerCount)+">";
while(temps[i]==' '){
i++;
}
result=result+temps.substr(i,temps.length()-i);
result+="</h"+Int_to_String(headerCount)+">";
}else if(temps[0]=='*'){
if(flagUl==0){
result+="<ul>\n";
flagUl=1;
}
int i=1;
while(temps[i]==' '){
i++;
}
result=result+"<li>"+temps.substr(i,temps.length()-i)+"</li>"+"\n";
}else{
//cout<<"flagP:"<<flagP<<endl;
if(flagP==0){
result+="<p>";
flagP=1;
}
result+=temps+"\n";
}
}else{
if(flagUl==0&&flagP==0){
Operator_Spec(result);
//Total_Result+=result;
cout<<result<<endl;
result="";
}else{
if(flagUl==1){
Operator_Spec(result);
//Total_Result=Total_Result+result+"</ul>";
cout<<result<<"</ul>"<<endl;
flagUl=0;
result="";
}
if(flagP==1){
result=result.substr(0,result.length()-1);
Operator_Spec(result);
//Total_Result=Total_Result+result+"</p>";
cout<<result+"</p>"<<endl;
flagP=0;
result="";
}
}
}
//cin.get();
//cout<<Total_Result<<endl;
return 0;
}
ccf-20170303--Markdown的更多相关文章
- CCF 201703-3 Markdown
问题描述 试题编号: 201703-3 试题名称: Markdown 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 Markdown 是一种很流行的轻量级标记语言(lig ...
- 【CCF】 Markdown 模拟
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- markdown绘图插件----mermaid简介
作者:黄永刚 mermaid简介 当撰写文档的时候,对于流程图的生成大多使用Visio等繁重的工具,没有一种轻便的工具能够画图从而简化文档的编写,就像markdown那样. mermaid解决这个痛点 ...
- CCF计算机职业资格认证考试题解
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF计算机职业资格认证考试题解 CCF计算机软件能力认证(简称CCF CSP认证)是CCF计算机职业资格认证系 ...
- CCF CSP 201703
CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...
- 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编辑器进行了一些功能拓展与语法支 ...
- 关于『进击的Markdown』:第四弹
关于『进击的Markdown』:第四弹 建议缩放90%食用 美人鱼(Mermaid)悄悄的来,又悄悄的走,挥一挥匕首,不留一个活口 又是漫漫画图路... 女士们先生们,大家好! 我们要接受Markd ...
随机推荐
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):注册中心(Spring Cloud Consul)
什么是 Consul Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与 ...
- Linux下搭建DNS缓存服务器
CentOS 6.10搭建本地DNS缓存服务器系统环境 1 [root@test ~]# cat /etc/redhat-release 2 CentOS release 6.10 (Final) 3 ...
- SQL优化原则(转)
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- [PHP] 算法-删除链表中重复的结点的PHP实现
删除链表中重复的结点: 1.定义两个指针pre和current 2.两个指针同时往后移动,current指针如果与后一个结点值相同,就独自往前走直到没有相等的 3.pre指针next直接指向curre ...
- Spring源码分析之IoC容器初始化
本文首发于cdream个人博客(点击获得更加阅读体验) 欢迎转载,转载请注明出处 作为一个java程序员,保守估计一年里也都有300天要和Spring有亲密接触~~像我这种怕是每天都要撸撸Spring ...
- 详解promise、async和await的执行顺序
1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async function async1(){ console.log('async1 sta ...
- 使用svn钩子遇到的坑
1.svn钩子(hooks)自动部署代码到web目录(以前公司用,很好奇怎么做的,折腾了两天,掉进了坑里)共勉!!! web目录:/home/www/xiaokai svn版本库目录:/svn/xia ...
- Graphviz的安装 - windows环境下
1. 官网下载 http://www.graphviz.org/ 往下拉,选择这一个 点进去,选择msi文件下载 下载完成之后,直接双击运行即可 安装完成之后要配置环境变量 2. 配置环境变量 将gr ...
- SOA、SOAP、RFC、RPC、IETF
SOA: 全称:Servuce - oriented Architecture 说明:面向服务架构 就是说将软件按照功能设计成一个个服务,这些服务用标准的方式定义接口.并通过标准的协议进行调用. SO ...
- a标签禁止跳转或者不跳转的几种实现方式
1.onclick事件中返回false <a href="http://www.baidu.com" onclick="return false" &g ...