题解:是个模拟题,其实还是很好想很好写的,把每句话有_abc_的和链接的先处理了,首先处理_abc_了,然后处理链接,或者先处理链接再处理_abc_也是可以的,最后就是看是标题还是列表还是段落了,每次都先进行初始化,然后再次进行判断处理即可。
附上代码:(我的代码写的贼长,太菜了)
#include<bits/stdc++.h>
using namespace std;
int main()
{
//freopen("F:\\in.txt","r",stdin);
string line;
while(getline(cin,line)){
int i=0,cnt=0,beginn=0,biao=0,liebiao=0,duan=0;
if(line.size()==0){
continue;
}
string temp1="";
for(int k=0;k<line.size();k++){
if(line[k]=='_'){
k++;
temp1=temp1+"<em>";
while(line[k]!='_'){
temp1+=line[k];
k++;
}
temp1=temp1+"</em>";
}else{
temp1+=line[k];
}
}
line=temp1;
temp1="";
for(int k=0;k<line.size();k++){
string test="",link="";
if(line[k]=='['){
k++;
while(line[k]!=']'){
test=test+line[k];
k++;
}
k+=2;
while(line[k]!=')'){
link=link+line[k];
k++;
}
temp1=temp1+"<a href=\""+link+"\">"+test+"</a>";
}else{
temp1=temp1+line[k];
}
}
line=temp1;
for(i=0;i<line.size();i++){
if(line[i]=='#'){
cnt++;
biao=1;
}else{
if(line[i]==' '){
break;
}
}
}
if(biao){
for(int j=i;j<line.size();j++){
if(line[j]!=' '){
beginn=j;
break;
}
}
printf("<h%d>",cnt);
for(int j=beginn;j<line.size();j++){
printf("%c",line[j]);
}
printf("</h%d>\n",cnt);
}
if(line[0]=='*'){
liebiao=1;
printf("<ul>\n");
for(int j=i;j<line.size();j++){
if(line[j]!=' '){
beginn=j;
break;
}
}
printf("<li>");
for(int j=beginn;j<line.size();j++){
printf("%c",line[j]);
}
printf("</li>\n");
int flag=0;
while(getline(cin,line)){
string temp1="";
for(int k=0;k<line.size();k++){
if(line[k]=='_'){
k++;
temp1=temp1+"<em>";
while(line[k]!='_'){
temp1+=line[k];
k++;
}
temp1=temp1+"</em>";
}else{
temp1+=line[k];
}
}
line=temp1;
temp1="";
for(int k=0;k<line.size();k++){
string test="",link="";
if(line[k]=='['){
k++;
while(line[k]!=']'){
test=test+line[k];
k++;
}
k+=2;
while(line[k]!=')'){
link=link+line[k];
k++;
}
temp1=temp1+"<a href=\""+link+"\">"+test+"</a>";
}else{
temp1=temp1+line[k];
}
}
line=temp1;
int len1=line.size();
if(len1==0){
printf("</ul>\n");
flag=1;
break;
}else{
for(int j=1;j<line.size();j++){
if(line[j]!=' '){
beginn=j;
break;
}
}
printf("<li>");
for(int j=beginn;j<line.size();j++){
printf("%c",line[j]);
}
printf("</li>\n");
}
}
if(!flag){
printf("</ul>\n");
}
}
if(!biao&&!liebiao){
duan=1;
printf("<p>");
for(int j=0;j<line.size();j++){
printf("%c",line[j]);
}
int flag=0;
while(getline(cin,line)){
string temp1="";
for(int k=0;k<line.size();k++){
if(line[k]=='_'){
k++;
temp1=temp1+"<em>";
while(line[k]!='_'){
temp1+=line[k];
k++;
}
temp1=temp1+"</em>";
}else{
temp1+=line[k];
}
}
line=temp1;
temp1="";
for(int k=0;k<line.size();k++){
string test="",link="";
if(line[k]=='['){
k++;
while(line[k]!=']'){
test=test+line[k];
k++;
}
k+=2;
while(line[k]!=')'){
link=link+line[k];
k++;
}
temp1=temp1+"<a href=\""+link+"\">"+test+"</a>";
}else{
temp1=temp1+line[k];
}
}
line=temp1;
if(line.size()==0){
flag=1;
printf("</p>\n");
break;
}else{
printf("\n");
for(int j=0;j<line.size();j++){
printf("%c",line[j]);
}
}
}
if(!flag){
printf("</p>\n");
}
}
}
return 0;
}
/*
# Heading
## Sub-heading
paragraphs are separated
by a blank line.
Text attributes _italic_.
Bullet list:
* _apples_
* _oranges_
* _pears_
A [link](http://example.com).
*/