CCF 201703-3 Markdown 100分
Posted 登登登ccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF 201703-3 Markdown 100分相关的知识,希望对你有一定的参考价值。
题目来源:- 计算机软件能力认证考试系统
注意:此题分为区块和行内两个部分,区块包括标题,段落和无序列表,行内包括强调和链接。每个区块都可能嵌套行内的部分。例如标题可能会嵌套强调和链接,这点要注意,不然得分很低。可以将主函数分为三个if条件对应标题,段落和无序列表,每个if下都要加入处理行内的部分,处理行内的部分可以单独拿出抽象为一个函数。
#include<bits/stdc++.h>
using namespace std;
string hangNei(string s) {
//处理强调
int count=0;
for(int i=0; i<s.size(); i++)
if(s[i]=='_') {
count++;
if(count%2==1)
s.replace(i,1,"<em>");
else
s.replace(i,1,"</em>");
}
//处理链接
string text,link;
for(int i=0; i<s.size(); i++)
if(s[i]=='[') {
int j=i;
while(s[j]!=']')
j++;
text=s.substr(i+1,j-i-1);
int a=j+2,b=j+2;
while(s[b]!=')')
b++;
link=s.substr(a,b-a);
s.replace(i,b-i+1,"<a href=\\""+link+"\\">"+text+"</a>");
}
return s;
}
//处理无序列表
void li(string s) {
s=s.substr(2);
cout<<"<li>"<<hangNei(s)<<"</li>"<<endl;
}
int main() {
string s;
while(getline(cin,s)) {
if(s.size()>0) {
if(s[0]=='#') {
//处理标题
int i=0;
while(s[i]=='#')
i++;
cout<<"<h"<<i<<">"<<hangNei(s.substr(i+1))<<"</h"<<i<<">"<<endl;
} else if(s[0]=='*') {
//处理无序列表
cout<<"<ul>"<<endl;
li(s);
while(getline(cin,s) && s.size()!=0) //下一行不为空行就反复循环
li(s);
cout<<"</ul>"<<endl;
} else {
//处理段落
cout<<"<p>"<<hangNei(s);
while(getline(cin,s) && s.size()!=0)
cout<<endl<<hangNei(s);
cout<<"</p>"<<endl;
}
}
}
return 0;
}
以上是关于CCF 201703-3 Markdown 100分的主要内容,如果未能解决你的问题,请参考以下文章