201703-3 Markdown 100分 0ms

点击前往试题目录:https://blog.csdn.net/best335/article/details/99550556
在这里插入图片描述
注意点:审题需仔细 字符串处理位置要谨慎

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
string proc1(string s){//处理强调
	int l=-1,r;
	while((l=(s.find('_',l+1)))!=string::npos){
		r=s.find('_',l+1);
		s=s.substr(0,l)+"<em>"+s.substr(l+1,r-l-1)+"</em>"+s.substr(r+1,s.size()-r-1);
	}
	return s;
}
string proc2(string s){//处理网址
	int l1=-1,r1,l2,r2;
	string s1,s2;//text link
	while((l1=s.find('[',l1+1))!=string::npos){
		r1=s.find(']',l1),l2=s.find('(',r1),r2=s.find(')',l2);
		s1=s.substr(l1+1,r1-l1-1),s2=s.substr(l2+1,r2-l2-1);
		s=s.substr(0,l1)+"<a href=\""+proc1(s2)+"\">"+proc1(s1)+"</a>"+s.substr(r2+1,s.size()-r2-1);
	}
	return s;
}
string proc(string s){return proc1(proc2(s));}//处理行
int main(){
	string s,s0;
	vector<string> S;
	while(getline(cin,s)||(S.size()>0&&(s="").size()==0)){
		if(s.size()==0){
	  		if(S.size()>0){//处理块
				int i,ni,j,nj;
				if(S[0][0]=='#'){
					for(i=0,ni=S[0].size();i<ni&&S[0][i]=='#';++i);
					for(j=min(i,6);i<ni&&S[0][i]==' ';++i);
					cout<<"<h"<<j<<">"<<proc(s0=S[0].substr(i,ni-i))<<"</h"<<j<<">"<<endl;
				}
				else if(S[0][0]=='*'){
					cout<<"<ul>"<<endl;
					for(i=0,ni=S.size();i<ni;++i){
						for(j=1,nj=S[i].size();j<nj&&S[i][j]==' ';++j);
						cout<<"<li>"<<proc(s0=S[i].substr(j,nj-j))<<"</li>"<<endl;
					}
					cout<<"</ul>"<<endl;
				}
				else{
					cout<<"<p>";
					for(i=0,ni=S.size();i<ni;++i) cout<<proc(S[i])<<(i==ni-1?"":"\n");
					cout<<"</p>"<<endl;
				}
			}
			S.clear();
		}
		else
			S.emplace_back(s);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值