#include<iostream>
#include<memory.h>
#include<stack>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
#include<sstream>
#include<set>
#include<queue>

using namespace std;

//处理超链接部分
string processA(string text)
{
    int begin,end;
    for(int i=0;i<text.length();i++)
    {
        if(text[i]=='[')
        {
            string ch,link;
            bool chend=false;
            bool linkend=true;;
            begin=i;
            for(int j=i+1;j<text.length();j++)
            {
                if(text[j]==']')
                {
                    chend=true;
                    continue;
                }
                if(text[j]=='(')
                {
                    linkend=false;
                    continue;
                }
                if(text[j]==')')
                {
                    end=j;
                    break;
                }

                if(!chend)
                    ch+=text[j];
                if(!linkend)
                    link+=text[j];
            }
            string newstr="<a href=\""+link+"\">"+ch+"</a>";
            text.replace(begin,end-begin+1,newstr);
        }
    }
    return text;
}

//处理着重号部分
string processK(string text)
{
    int begin,end;
    for(int i=0;i<text.length();i++)
    {
        if(text[i]=='_')
        {
            begin=i;
            string k="";
            for(int j=i+1;j<text.length();j++)
            {
                if(text[j]=='_')
                {
                    end=j;
                    break;
                }
                k+=text[j];
            }
        string newstr="<em>"+k+"</em>";
        text.replace(begin,end-begin+1,newstr);
        }
    }
    return text;
}

//处理三种区块部分
void processQ(queue<string> &q,queue<string> &r)
{
    string front=q.front();
    if(front[0]=='*')
    {
        string newstr="<ul>\n";
        while(!q.empty())
        {
            string t=q.front();
            q.pop();
            int count=0;
            for(int i=0;i<t.length();i++)
            {
                if(t[i]==' '||t[i]=='*')
                    count++;
                else
                    break;
            }
            t.erase(0,count);
            t=processA(t);
            t=processK(t);
            t="<li>"+t+"</li>\n";
            newstr+=t;
        }
        newstr+="</ul>";
        r.push(newstr);
    }
    else if(front[0]=='#')
    {
        while(!q.empty())
        {
            string head=q.front();
        q.pop();
        head=processA(head);
        head=processK(head);
        int h=0;
        int space=0;
        for(int i=0;i<head.length();i++)
        {
            if(head[i]=='#')
                h++;
            else if(head[i]==' ')
                space++;
            else
                break;
        }
        head.erase(0,h+space);
        ostringstream s;
        s<<h;
        string H=s.str();
        head="<h"+H+">"+head+"</h"+H+">";
        r.push(head);
        }

    }
    else
    {
        string newstr="<p>";
        while(!q.empty())
        {
            string p = q.front();
            q.pop();
            p = processA(p);
            p = processK(p);
            if(!q.empty())
                p+="\n";
            newstr+=p;
        }
        newstr=newstr+"</p>";
        r.push(newstr);
    }
}

//读取和输出
int main()
{
    string line;
    queue<string> q;
    queue<string> r;
    while(getline(cin,line))
    {
        if(line=="")
        {
            if(q.empty())
                continue;
            else
                processQ(q,r);
            continue;
        }
        q.push(line);
    }
    if(!q.empty())
        processQ(q,r);
    while(!r.empty())
    {
        cout<<r.front()<<endl;;
        r.pop();
    }
    return 0;
}
     

(ccf)201703-3markdown的更多相关文章

  1. CCF CSP 201703

    CCF CSP 2017·03 做了一段时间的CCF CSP试题,个人感觉是这样分布的 A.B题基本纯暴力可满分 B题留心数据范围 C题是个大模拟,留心即可 D题更倾向于图论?(个人做到的D题基本都是 ...

  2. CCF考试

    第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...

  3. CCF关于NOIP2014复赛报名的通知

    CCF关于NOIP2014复赛报名的通知   CCF NOIP2014复赛全部实行网上注册.报名.未通过网上报名的选手将不具备参赛和申诉资格. 系统注册须知: NOIP2014复赛注册时间:2014年 ...

  4. [CCF] Z字形扫描

    CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...

  5. [CCF] ISBN号码检测

    CCF ISBN号码检测 题目概述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如"x-xxx-xxxxx-x",其 ...

  6. CCF NOI系列活动

    NOI-全国青少年信息学奥林匹克竞赛全国青少年信息学奥林匹克竞赛(NOI)是国内信息学领域内面向中学生的最高水平的大赛,每省派经选拔产生的选手(其中一名是女选手)参加,NOI每年在不同的省市举行. N ...

  7. CCF考前注意几点

    1.数组最好保持初始化习惯,且检查数组初始化在循环内还是循环外,若在循环内需要对数组进行处理,则数组初始化必须放在for循环内. 2.for循环保持好习惯,用括号括起来,以免粗心. 3.if条件判断要 ...

  8. CCF真题之最优灌溉

    201412-4 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利 ...

  9. 《计算机问题求解》总结——2014年CCF计算机课程改革导教班(2014.07.11)

    一:引言     "心想事成".这是自己获得导教班学习机会的最佳概括.2013年年末学习李晓明老师的<人群与网络>课程:随后网络认识烟台大学贺利坚老师,了解到2013年 ...

  10. 2016年CCF第七次测试 俄罗斯方块

    //2016年CCF第七次测试 俄罗斯方块 // 这道小模拟题还是不错 // 思路:处理出输入矩阵中含1格子的行数和列数 // 再判是否有一个格子碰到底部,否则整体再往下移动一步,如果有一个格子不能移 ...

随机推荐

  1. research plan1111

    Hello prof.Choi 感谢您的来电,与您的这次通话我已经期盼了很久.我来做个自我介绍,我叫陈飞,今年27岁了,是河北地质大学计算机科学专业的本科毕业生.我非常想提高自己的学历,现在经过刘老师 ...

  2. ASP.NET无法检测IE10浏览器,导致无法登录

    今天发现在IE10中打开我开发的网站时,无法登入,页面总会自动重新退出到登录页,后经上网查资料发现这是ASP.NET 2.0.3.5和4.0的Bugs,因这些版本的.NET Framework无法识别 ...

  3. There was a conflict between

    解读,首先搜索到第一个5>的开头的那一行,确认是在编译哪一个项目. 那么后面的冲突,就是在和这个项目冲突. There was a conflict between "log4net, ...

  4. luogu 3383【模板】线性筛素数

    我太菜了 %韩神 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib&g ...

  5. 一款使用C# .NET开发的SIP网络电话客户端完整源码

    一款使用C# .NET开发的SIP客户端开源项目.测试可编译通过运行,特此分享一下.可以对接ASTGO.VOS2009.VOS3000.NTS.UCS等各种SIP协议的软交换! 下载地址:https: ...

  6. E20170628-hm

    forgery   n. 伪造; 伪造罪; 伪造物; 伪造签字; distribute   vt. 分配,散布; 散发,分发; 把…分类; [电] 配电; contribute to(contribu ...

  7. [转载]马士兵Java视频教程 —— 学习顺序

    书(Java核心编程)+视频..这样学感觉比较好.. 原文地址:马士兵Java视频教程 —— 学习顺序作者:习惯 第一部分:J2se学习视频内容包括: 尚学堂科技_马士兵_JAVA视频教程_JDK5. ...

  8. phonegap+cordova+ionic调用原生API

    上一篇博客讲了phonegap+cordova+ionic的环境搭建,今天再来分享一篇cordova调用原生API的文章.从技术角度上来讲,这并不是很难,只是有些细节要是没有注意,或者某些步骤不知道的 ...

  9. SVN异常处理(五)-状态小图标不见了

    1.发现问题 装了Win10,再装了Office2016等一些最新软件后,发现SVN状态小图标竟然就不见了 2.分析问题 在Window系统中,当UAC启动时,有些应用程序的图标上会显示一个盾牌,像这 ...

  10. HTML+CSS(12)

    n  CSS浮动和清除 Float:让元素浮动,取值:left(左浮动).right(右浮动). Clear:清除浮动,取值:left(清除左浮动).right(清除右浮动).both(同时清除上面的 ...