问题描述
试题编号: | 201703-3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
试题名称: | Markdown | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
时间限制: | 1.0s | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
内存限制: | 256.0MB | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
问题描述: |
问题描述 Markdown 是一种很流行的轻量级标记语言(lightweight markup language),广泛用于撰写带格式的文档。例如以下这段文本就是用 Markdown 的语法写成的: 输入格式 输入由若干行组成,表示一个用本题规定的 Markdown 语法撰写的文档。 输出格式 输出由若干行组成,表示输入的 Markdown 文档转换成产生的 HTML 代码。 样例输入 # Hello 样例输出 <h1>Hello</h1> 评测用例规模与约定 本题的测试点满足以下条件:●本题每个测试点的输入数据所包含的行数都不超过100,每行字符的个数(包括行末换行符)都不超过100。 ●除了换行符之外,所有字符都是 ASCII 码 32 至 126 的可打印字符。 ●每行行首和行末都不会出现空格字符。 ●输入数据除了 Markdown 语法所需,内容中不会出现 `#`、`*`、`_`、`[`、`]`、`(`、`)`、`<`、`>`、`&` 这些字符。 ●所有测试点均符合题目所规定的 Markdown 语法,你的程序不需要考虑语法错误的情况。 每个测试点包含的语法规则如下表所示,其中“√”表示包含,“×”表示不包含。
提示 由于本题要将输入数据当做一个文本文件来处理,要逐行读取直到文件结束,C/C++、Java 语言的用户可以参考以下代码片段来读取输入内容。 |
这种大模拟题真的太恶心了。别人的AC代码(离线操作版)。
我是离线操作,先将字符串保存起来,每个区块用左括号和右括号相隔,后期便于处理区块间的关系。然后就是常见的字符串处理啦。注意段落、标题和无序列表里都有可能有强调、超级链接或者两者的嵌套。其他特殊情况我也没去想了,心累。几个处理函数应该还有很大的优化空间。
最后面是我用的样例,如果在编译器上要看输出应该要按Ctrl+Z再按回车,因为while(cin,line)停不下来。
真的找不到哪儿错了,找了两天了(╬◣д◢),感觉和别人AC的代码输出完全没两样啊!!!
80分代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<string> 4 #include<iomanip> 5 #include<vector> 6 #include<cmath> 7 #include<queue> 8 using namespace std; 9 string udl(string s)//underline 10 { 11 if(s.find('_',0)==string::npos) return s; 12 int pos1=s.find('_',0);s.erase(pos1,1); 13 s.insert(pos1,"<em>"); 14 int pos2=s.find('_',pos1);s.erase(pos2,1); 15 s.insert(pos2,"</em>"); 16 return s; 17 } 18 string sul(string s)//super link 19 { 20 if(s.find("(",0)==string::npos) return s; 21 int pos1=s.find("(",0),pos2=s.find(")",0); 22 string temp=s.substr(pos1,pos2-pos1+1); 23 s.erase(pos1,pos2-pos1+1); 24 temp[0]=temp[temp.length()-1]='"'; 25 temp.insert(0,"<a href=");temp+=">"; 26 pos1=s.find("[",0),s.insert(pos1,temp); 27 pos1=s.find("[",0),s.erase(pos1,1); 28 pos2=s.find("]",0),s.insert(pos2,"</a>"); 29 pos2=s.find("]",0),s.erase(pos2,1); 30 return s; 31 } 32 void fun_ti(string s)//title 33 { 34 int num=count(s.begin(),s.end(),'#'); 35 string temp;temp+=char(num+'0'); 36 temp="<h"+temp;temp+=">"; 37 while(s[num]==' ') num++; 38 s=s.substr(num);s.insert(0,temp); 39 temp.insert(1,"/"); 40 s.insert(s.length(),temp); 41 s=sul(s);s=udl(s); 42 cout<<s<<endl; 43 } 44 void fun_li(string s)//list 45 { 46 int num=1; 47 while(s[num]==' ') num++; 48 s=s.substr(num); 49 s.insert(0,"<li>"); 50 s.insert(s.length(),"</li>"); 51 s=sul(s);s=udl(s); 52 cout<<s<<endl; 53 } 54 void fun_pa(string s)//paragraph 55 { 56 s=sul(s);s=udl(s); 57 cout<<s; 58 } 59 int main() 60 { 61 string line; 62 queue<string> str; 63 str.push("("); 64 bool flag=0;//区块内是否有内容 65 while(getline(cin,line)) 66 { 67 if(line[0]=='