ccf201703-3

Markdown转HTML代码解析

我的天啊,这是什么神仙题啊,完全不知道自己错哪里了。。。头发都掉光了,才60分啊!!!

你们说说,这ACM好歹知道自己错了,然后再改。这CCF还看不到,高高兴兴以为自己能100分,然后0分~~~

别动让我哭一会儿~~~~

抄的这位老哥的代码,然后自己再尝试着写。。。

https://www.cnblogs.com/from00/p/6663592.html

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string str[105];
string tmp1;
void output(string str)
{
   int len=str.length();

   for(int i=0;i<len;i++)
   {
       if(str[i]=='_')
       {
             int r=str.find('_',i+1);//我就不理解了,我遇到下划线就输出<em>不行吗,我用flag控制,判断是否遇到第二个下划线,再输出</em>就不行????
             string tmp="<em>"+str.substr(i+1,r-i-1)+"</em>";
             cout<<tmp;
             i=r;
       }else if(str[i]=='[')
       {
           int r=str.find(']',i+1);
           tmp1=str.substr(i+1,r-i-1);
           i=r;
       }else if(str[i]=='(')
        {
             int r=str.find(')',i+1);
           string tmp2=str.substr(i+1,r-i-1);
           i=r;
           cout<<"<a href=\""+tmp2+"\">"+tmp1+"</a>";//这个双引号怎么输出还是得注意一下
        }
       else
       {
           printf("%c",str[i]);
       }
   }

}
void passage(int cnt)
{
    printf("<p>");
    for(int i=0;i<cnt;i++)
    {
        output(str[i]);
        if(i==cnt-1)
        printf("</p>");
        cout<<endl;
    }

}
void headline()
{
    int len=str[0].length(),pos;
    int count=0;
    for(int i=0;i<len;i++)
    {
        if(str[0][i]=='#')
        {
            count++;

        }
        else if(str[0][i]!='#'&&str[0][i]!=' ')
        {
           pos=i;
           break;
        }
    }
    printf("<h%d>",count);
    cout<<str[0].substr(pos);
    printf("</h%d>\n",count);//换行一定要加啊!!!
}
void list(int cnt)
{
    printf("<ul>\n");
    int pos;
    for(int i=0;i<cnt;i++)
    {
        for(int j=0;j<str[i].length();j++)
        {
            if(str[i][j]!='*'&&str[i][j]!=' ')
            {
                pos=j;
                break;//break一定要加,不加就剩最后一个字符了
            }
        }
        printf("<li>");
        cout<<str[i].substr(pos);
        printf("</li>\n");
    }
    printf("</ul>\n");
}
int main()
{
    std::string line;
    int cnt=0;
    while(std::getline(std::cin,line))
    {
        if(line=="")
        {
            if(cnt==0)continue;//万一前面全是空行
            if(str[0][0]=='#')headline();
            else if(str[0][0]=='*')list(cnt);
            else passage(cnt);

            cnt=0;
            continue;//不能将空行赋值给str
        }


        str[cnt++]=line;
    }
    if(cnt)//就是不知道为啥加这段代码,不加就0分啊!!!
    {
       if(str[0][0]=='#')headline();
            else if(str[0][0]=='*')list(cnt);
            else passage(cnt);
    }
    return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值