题目很长,注意的地方也很多,本题有个坑,就是标题或者无序列表中也会存在超级链接和强调,所以要注意。
代码:
#include<stdio.h>
#include<iostream>
#include<vector>
using namespace std;
string s[200];
int cha(string a)
{
int j,flag=0;
for(j=0; a[j]; j++)
{
if(a[j]!=' ')
{
flag=1;
break;
}
}
if(flag)return 0;
return 1;
}
string answer(string ss)
{
string pss="";
int num=0;
if(ss.find("_")==-1&&ss.find("](")==-1)return ss;
while(ss.find("_")!=-1)
{
//cout<<"++"<<endl;
int pos=ss.find("_");
num++;
if(num%2)
{
pss=ss.substr(0,pos)+"<em>"+ss.substr(pos+1);
}
else
{
pss=ss.substr(0,pos)+"</em>"+ss.substr(pos+1);
}
ss=pss;
}
if(ss.find("](")==-1)return pss;
string ks1,ks2,link,ks3,res;
while(ss.find("](")!=-1)
{
//cout<<"***"<<endl;
int pos=ss.find("[");
int pos2=ss.find("]");
ks1=ss.substr(0,pos);
ks2=ss.substr(pos+1,pos2-pos-1);
pos=ss.find("(");
pos2=ss.find(")");
link=ss.substr(pos+1,pos2-pos-1);
ks3=ss.substr(pos2+1);
res="";
res=ks1+"<a href="+'\"'+link+'\"'+">"+ks2+"</a>"+ks3;
ss=res;
}
return res;
}
int main()
{
int cas=1;
string ss;
vector<string>V;
V.clear();
while(getline(cin,ss))
{
s[cas++]=ss;
}
for(int i=1; i<cas; i)
{
if(!cha(s[i]))//²»ÊÇ¿ÕÐÐ
{
if(s[i][0]=='#')
{
int num=0;
int j;
for(j=0; s[i][j]; j++)
{
if(s[i][j]=='#')num++;
else if(s[i][j]!=' ')break;
}
s[i]=s[i].substr(j);
char c=num+'0';
string nums="<h";
nums.push_back(c);
nums+=">"+answer(s[i])+"</h";
nums.push_back(c);
nums+=">";
V.push_back(nums);
i++;
}
else if(s[i][0]=='*')
{
V.push_back("<ul>");
while(s[i][0]=='*')
{
int j;
for(j=1; s[i][j]; j++)
{
if(s[i][j]!=' ')break;
}
s[i]=s[i].substr(j);
string xs="<li>"+answer(s[i])+"</li>";
V.push_back(xs);
i++;
}
V.push_back("</ul>");
}
else
{
if(cha(s[i+1]))
V.push_back("<p>"+answer(s[i])+"</p>");
else
{
V.push_back("<p>"+answer(s[i]));
i++;
while(!cha(s[i+1]))
{
V.push_back(answer(s[i]));
i++;
}
V.push_back(answer(s[i])+"</p>");
}
i++;
}
}
else
i++;
}
for(int i=0; i<V.size(); i++)
{
cout<<V[i]<<endl;
}
}
/*
# heading
## gub-heading
paragaraphs are separated
by a blank line.
Text attributes _italic_.
Bullet list:
* apples
* oranges
* pears
A [_link_](http://example.com).
*/