ccf-2017-3-3 markdown

也是奇了怪了,三个月前,怎么调试都是90分,这次竟然一下子就100分了

这道题不是很复杂,用好vector就行了,然后对字符串进行一些简单的处理

对于段落,设置一个bool形变量,对于vector.back()进行加“</p>”

无序列表亦是如此,

对于剩下一个标题,对于上面两个的bool变量操作一下就好了

还有一个空行,空行跳过去(对于那两个bool变量还是要操作的)就好了

下面是代码

#include<iostream>
#include<string>
#include<vector>
using namespace std;
void normal(string &str){
	size_t f1=str.find("_");
//	cout<<f1<<endl;
	while(f1!=string::npos){
		str=str.substr(0,f1)+"<em>"+str.substr(f1+1,str.length()-f1-1);
		//cout<<str<<endl;
		f1=str.find("_");
		str=str.substr(0,f1)+"</em>"+str.substr(f1+1,str.length()-f1-1);
		//cout<<str<<endl;
		f1=str.find("_");
	}
	size_t f2=str.find("[");
	while(f2!=string::npos){
		size_t	f3=str.find("]");
		size_t  f4=str.find("(");
		size_t  f5=str.find(")");	
		string link=str.substr(f4+1,f5-f4-1);
		string text=str.substr(f2+1,f3-f2-1);
		str=str.substr(0,f2)+"<a href=\""+link+"\">"+text+"</a>"+str.substr(f5+1,str.length()-f5-1);
		f2=str.find("[");
//		cout<<"1"<<endl;
	}
}
string IntToString(int a){
	char b[30];
	sprintf(b,"%d",a);
	return b;
}
vector<string> vec;
int main(){
	string str;
	bool p=false,ul=false;
	while(getline(cin,str)){
		if(str==""){
			if(p){
				p=false;
				vec.back()=vec.back()+"</p>";
			}
			if(ul){
				ul=false;
				vec.push_back("</ul>");
			}
			continue;
		}
		normal(str);
		if(str[0]=='#'){
			if(p){
				p=false;
				vec.back()=vec.back()+"</p>";
			}
			if(ul){
				ul=false;
				vec.push_back("</ul>");
			}
			int n=0;
			while(str[0]=='#'){
				n++;
				str=str.substr(1,str.length()-1);
			}
			while(str[0]==' ') 
			str=str.substr(1,str.length()-1);
			char c=n+'0';
			string b=" ";
			b[0]=c;
			str="<h"+b+">"+str+"</h"+b+">";
			vec.push_back(str);	
		}
		else if(str[0]=='*'){
			if(p){
				vec.back()=vec.back()+"</p>";
				p=false;
				}
			if(!ul){
				 vec.push_back("<ul>");
				 ul=true;
			}
			normal(str);
			str=str.substr(1,str.length()-1);
			while(str[0]==' ') 
			str=str.substr(1,str.length()-1);
			str="<li>"+str+"</li>";
			vec.push_back(str);
		}
		else{
			if(ul){
				vec.push_back("</ul>");
				ul=false;
			}
//			cout<<"1"<<endl;
			normal(str);
			if(!p) {
				str="<p>"+str;
				p=true;	
			}
			vec.push_back(str);
		}
	}
		if(p){
				p=false;
				vec.back()=vec.back()+"</p>";
			}
			if(ul){
				ul=false;
				vec.push_back("</ul>");
		}
		for(vector<string>::iterator it=vec.begin();it!=vec.end();it++){
			cout<<(*it)<<endl;
		}
}
/*
# Heading

## Sub-heading

paragraph are separated
by a blank line.

Text attribute _italic_.

Bullet list:

* apples
* oranges
* pears

A [link](http://example.com).
*/
//也是奇了怪了,这次得了一百分 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值