70分,待填坑
#include<iostream>
#include<string>
#include<fstream>
using namespace std;string inner(string s){string left,right,result=s;int number_=0; while(result.find('_')!=string::npos){ //有强调符号 number_++;left=string(result,0,result.find('_'));right=string(result,result.find('_')+1);result=left;if(number_%2==1){result+="<em>";}else{result+="</em>";}result+=right;}while(result.find('[')!=string::npos){ //有链接 int t1=result.find('[');int t2=result.find(']');int l1=result.find('(');int l2=result.find(')');string left=string(result,0,t1);string right=string(result,l2+1);string text=string(result,t1+1,t2-t1-1);string link=string(result,l1+1,l2-l1-1);result=left;result+="<a href=\"";result+=link;result+="\">";result+=text;result+="</a>";result+=right;
// cout<<result<<endl;}return result;
}
int main(){string line;int listlevel=0;ifstream cin( "D:\\TYUT\\Dev 代码\\CCF\\新建文本文档.txt" );while(getline(cin,line)){ if(line[0]!='*' && listlevel!=0){ //输出列表的结束符 cout<<"</ul>"<<endl;listlevel=0;}if(line.length()==0) ;else if(line[0]=='#'){ //标题int level=0;while(line[0]=='#'){line=string(line,1);if(level<=5){ //最深只有6层 level++;}}while(line[0]==' '){ //去掉#与后边之间多余的空格 line=string(line,1);}
// cout<<line<<" "<<level<<endl;line=inner(line);cout<<"<h"<<level<<">"<<line<<"</h"<<level<<">"<<endl; }else if(line[0]=='*'){ //列表 if(listlevel==0){cout<<"<ul>"<<endl; }listlevel++;line=string(line,1);while(line[0]==' '){ //去掉#与后边之间多余的空格 line=string(line,1);}line=inner(line);cout<<"<li>"<<line<<"</li>"<<endl; }else{ //段落 cout<<"<p>";line=inner(line); cout<<line;while(getline(cin,line) && line.length()!=0){ //怎么判断这一行是不是空行?长度为0就是空行啊 cout<<endl;line=inner(line);cout<<line;} cout<<"</p>"<<endl; }}return 0;
}