• CCF-CSP题解 201703-3 Markdown


    要求实现简易的Markdown到Html格式的转换。

    主要就是字符串处理。以空行划分各个区块,区块内部字符的输出用一个(print\_buf)实现,至于强调和超链接的嵌套,则可以递归实现。

    注意用scanf % ^ & getchar实现,输入空行的时候,这个函数匹配不到字符,是不起作用的。也就是说,(buf[])保持原样,不会变成"",buf[0]也不会是''。所以判断空行需要从scanf的返回值入手。scanf返回值是成功匹配的个数,所以空行时它的返回值是0,非空时返回值为1,输入结束时返回值为-1(EOF)。

    有空行的情况或者输入庞大的时候,可以使用fgets buf buf_sz stdin函数。这个函数会把换行符也读入字符串中,所以判断空行只需判断buf[0]是否是' '即可。后续字符串处理的时候还是把' ''换成''会比较好。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    void print_buf(char buf[])
    {
        for (int i = 0; buf[i] != ''; i++)
        {
            if (buf[i] == '_')
            {
                int j = i + 1;
                for (; buf[j] != '_'; j++);
                char tmp_buf[105];
                strcpy(tmp_buf, buf + i + 1);
                tmp_buf[j-i-1] = '';
                printf("<em>");
                print_buf(tmp_buf);
                printf("</em>");
                i = j;
            }
            else if (buf[i] == '[')
            {
                char text[105], link[105];
                int j = i + 1;
                for (; buf[j] != ']'; j++);
                strcpy(text, buf + i + 1);
                text[j-i-1] = '';
                i = j + 1;
                j = i + 1;
                for (; buf[j] != ')'; j++);
                strcpy(link, buf + i + 1);
                link[j-i-1] = '';
                printf("<a href="");
                print_buf(link);
                printf("">");
                print_buf(text);
                printf("</a>");
                i = j;
            }
            else
            {
                printf("%c", buf[i]);
            }
        }
    }
    
    int main()
    {
        char buf[105];
        int tmpblk = -1; // 0 p 1 h 2 ul
        while (fgets(buf, 105, stdin) != NULL)
        {
            if (buf[0] == '
    ')
            {
                if (tmpblk == 2)
                    printf("</ul>
    ");
                else if (tmpblk == 0)
                {
                    printf("</p>
    ");
                }
                tmpblk = -1;
            }
            else
            {
                buf[strlen(buf)-1] = '';
                if (buf[0] == '#')
                {
                    tmpblk = 1;
                    int h_num = 0;
                    int i = 0;
                    for (; buf[i] == '#'; i++)
                        h_num++;
                    for (; buf[i] == ' '; i++);
                    printf("<h%d>", h_num);
                    print_buf(buf + i);
                    printf("</h%d>
    ", h_num);
                }
                else if (buf[0] == '*')
                {
                    if (tmpblk == 2)
                    {
                        int i = 1;
                        for (; buf[i] == ' '; i++);
                        printf("<li>");
                        print_buf(buf + i);
                        printf("</li>
    ");
                    }
                    else
                    {
                        tmpblk = 2;
                        int i = 1;
                        for (; buf[i] == ' '; i++);
                        printf("<ul>
    ");
                        printf("<li>");
                        print_buf(buf + i);
                        printf("</li>
    ");
                    }
                }
                else
                {
                    if (tmpblk == 0)
                    {
                        printf("
    ");
                        print_buf(buf);
                    }
                    else
                    {
                        tmpblk = 0;
                        printf("<p>");
                        print_buf(buf);
                    }
                }
            }
        }
    
        if (tmpblk == 2)
            printf("</ul>
    ");
        else if (tmpblk == 0)
        {
            printf("</p>
    ");
        }
    
        return 0;
    }
    
  • 相关阅读:
    tomcat log
    关于 终端 ls 命令 不能区分文件和目录的问题
    画幅
    透视
    焦距和等效焦距
    滚动条插件mCustomScrollbar
    网页优化总结
    CSS3中translate、transform和translation的区别和联系
    Less的学习和使用
    Koala工具的使用说明
  • 原文地址:https://www.cnblogs.com/acboyty/p/11372051.html
Copyright © 2020-2023  润新知