嘘~ 正在从服务器偷取页面 . . .

CCFMarkdown---用到了状态机的思想


CCF-201703-3

下面都不会了

题目如下

1
2
3
4

解题思路

1.先处理行内的强调和超级链接
2.然后处理区块,用到了状态机思想(第一次切换状态的时候加前一状态的后缀和现在状态的前缀)
3.过了样例后只有60分,把写的函数全部不用了,一起写到主函数,突然就可以了,我就纳闷。还没找到原因,之后会持续更新的
4.反正我是做自闭了。可恶!

满分代码

#include<iostream>
#include<cstring>
using namespace std;
string t[7]={"0","1","2","3","4","5","6"};
int main(){
       string line;
       string temp="";
       int sign=0;
       int start,end;
       while(getline(cin,line)){
              while(line.find('_')!=line.npos){
                     start=line.find('_');
                     line.replace(start,1,"<em>");
                     end=line.find('_');
                     line.replace(end,1,"</em>");
              }
              while(line.find('[')!=line.npos){
                     start=line.find('[');
                     end=line.find(')');
                     string text=line.substr(start+1,line.find(']')-start-1);
                     string link=line.substr(line.find('(')+1,line.find(')')-line.find('(')-1);
                     line.replace(start,end-start+1,"<ahref=\""+link+"\">"+text+"</a>");
              }
              if(line==""){
                     if(sign==1){
                            temp+="</ul>\n";
                            sign=0;
                     }else
             if(sign==2){
                            temp+="</p>\n";
                            sign=0;
                     }
              }
              else if(line[0]=='#'){
                     start=0;
                     end=line.find(" ");
                     temp+="<h"+t[end-start]+">"+line.substr(end+1)+"</h"+t[end-start]+">\n";       
              }
              else if(line[0]=='*'){
                     if(sign==0){
                            temp+="<ul>\n";
                            sign=1;
                     }
                     temp+="<li>"+line.substr(2)+"</li>\n";                  
              }else{
                     if(sign==0){
                            temp+="<p>"+line;
                            sign=2;
                     }
                     else if(sign==2){
                            temp+="\n"+line;
                     }
              }
       }
       if(sign==1){
              temp+="</ul>\n";
              sign=0;
       }
       else if(sign==2){
              temp+="</p>\n";
              sign=0;
       }
       cout<<temp<<endl;
       return 0;
}

结果


版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梦想成为假面骑士的司祎同学 !
赏
评论
评论
 上一篇
CCF权限查询---解释一下什么是“大力出奇迹” CCF权限查询---解释一下什么是“大力出奇迹”
CCF-201612-3 我们先来看一下题目吧 解题思路真的很恼火,思路简单,写起来比较繁琐。全部存下来,然后一个一个查,查到了true,否则false,如果是无等级查询可能会返回等级挺费时间的,没办法,后面的算法题不会,只能刚模拟了查询一
2020-09-06
下一篇 
CCF路径解析---String::find()&&erase() CCF路径解析---String::find()&&erase()
CCF-201604-3 让我们先来看一下题目 解题思路1.看到这种文本字符处理的题,肯定烦躁,这个简单看着都烦;2.先冷静下来,分析需求;3.输入后,先处理空串和相对路径(+path);4.一个一个点来消除,先是多余的/,再是/./然后是
2020-09-05
  目录