题目链接:http://118.190.20.162/submitlist.page?gpid=T55
思路:按题意模拟
- .-没找到哪里错了,只有80分
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sstream>
using namespace std;
string str[105];
string result[200];
int pos;
int r_pos;
//行内处理
string getInline(string x){
for(int i=0;i<x.size();i++){
if(x[i]=='['){
int j=i+1;
string link_content;
while(x[j]!=']'){
link_content+=x[j];
j++;
}
j+=2;
string link_address;
while(x[j]!=')'){
link_address+=x[j];
j++;
}
string final="<a href=\""+link_address+"\">"+link_content+"</a>";
x.replace(i,4+link_content.size()+link_address.size(),final);
}
}
for(int i=0;i<x.size();i++){
if(x[i]=='_'){
int j=i+1;
string content;
while(x[j]!='_'){
content+=x[j];
j++;
}
string re="<em>"+content+"</em>";
x.replace(i,content.size()+2,re);
}
}
return x;
}
int main() {
string tmp_str;
while(getline(cin,tmp_str)){
str[pos++] = tmp_str;
}
for(int i=0;i<pos;i++){
//处理标题块
if(str[i][0]=='#'){
int Jing_num=0,j;
for(j=0;j<str[i].size();j++){
if(str[i][j]=='#'){
Jing_num++;
}
else
{
break;
}
}
if(Jing_num>6){
Jing_num=6;
}
stringstream ss;
ss<<Jing_num;
string start="<h"+ss.str()+">";
for(j=0;j<str[i].size();j++){
if(str[i][j]=='#'||str[i][j]==' '){
continue;
}
else
{
break;
}
}
string content=str[i].substr(j);
string end="</h"+ss.str()+">";
result[r_pos]=getInline(start+content+end);
r_pos++;
}
//处理段落块
else if(str[i][0]!='#'&&str[i][0]!='*'&&str[i]!=""){
str[i]="<p>"+str[i];
int j;
for(j=i;j<pos;j++) {
if (str[j]!="") {
str[j] = getInline(str[j]);
} else {
break;
}
}
j--;
str[j]=str[j]+"</p>";
for(int k=i;k<=j;k++){
result[r_pos++]=str[k];
}
i=j;
}
//处理无序列表块
else if(str[i][0]=='*'){
result[r_pos++]="<ul>";
int j;
for(j=i;j<pos;j++){
string content;
if(str[j]!="") {
for (int k = 0; k < str[j].size(); k++) {
if (str[j][k] != '*' && str[j][k] != ' ') {
content += str[j][k];
}
}
str[j] = "<li>" + content + "</li>";
str[j] = getInline(str[j]);
}
else
{
break;
}
}
for(int k=i;k<j;k++){
result[r_pos++]=str[k];
}
i=j;
result[r_pos++]="</ul>";
}
}
for(int i=0;i<r_pos;i++){
if(i!=r_pos-1) {
cout << result[i] << endl;
}
else
{
cout<<result[i];
}
}
return 0;
}