CCF202006-3 Markdown渲染器(100分)文本处理

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF202006-3 Markdown渲染器(100分)文本处理相关的知识,希望对你有一定的参考价值。

试题编号: 202006-3
试题名称: Markdown渲染器
时间限制: 1.0s
内存限制: 512.0MB




问题链接CCF202006-3 Markdown渲染器
问题简述:(略)
问题分析:文本处理问题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

100分的C++语言程序如下:

/* CCF202006-3 Markdown渲染器 */

#include <bits/stdc++.h>

using namespace std;

string standard(string t)
{
    t.erase(0, t.find_first_not_of(' '));
    t.erase(t.find_last_not_of(' ') + 1);
    return t;
}

struct Markdown {
    int type;
    string s;
};
vector<Markdown> v;    // 1:新项目,2:子项目,3:段落

int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    bool flag = false;
    string s;
    int w;
    cin >> w;
    while (getline(cin, s)) {
        if ((int)s.size() == count(s.begin(), s.end(), ' ')) flag = true;
        else {
            if (flag || v.empty()) {
                if (s.size() >= 2 && s[0] == '*' && s[1] == ' ')
                    v.push_back({1, standard(s.substr(2))});
                else
                    v.push_back({3, standard(s)});
                flag = false;
            } else {
                Markdown &last = v.back();
                if (last.type <= 2) {
                    if (s.size() >= 2 && s[0] == ' ' && s[1] == ' ')
                        last.s += " " + standard(s.substr(2));
                    else if (s.size() >= 2 && s[0] == '*' && s[1] == ' ')
                        v.push_back({2, standard(s.substr(2))});
                    else
                        v.push_back({3, standard(s)});
                } else {
                    if (s.size() >= 2 && s[0] == '*' && s[1] == ' ')//新项目
                        v.push_back({1, standard(s.substr(2))});
                    else
                        last.s += " " + standard(s);
                }
            }
        }
    }

    int ans = 0;
    for (int i = 0; i < (int)v.size(); i++) {
        string t = v[i].s;
        if (v[i].type != 2 && i > 0)
            ans++;
        if (v[i].type <= 2) {
            if (t.size() == 0) ans++;
            else {
                for (int i = 0; i < (int)t.size(); i += (w - 3)) {
                    while (i < (int)t.size() && t[i] == ' ') i++;
                    ans++;
                }
            }
        } else {
            for (int i  =0; i < (int)t.size(); i += w) {
                while (i < (int)t.size() && t[i] == ' ') i++;
                ans++;
            }
        }
    }

    cout << ans << endl;

    return 0;
}

以上是关于CCF202006-3 Markdown渲染器(100分)文本处理的主要内容,如果未能解决你的问题,请参考以下文章

使用Chrome浏览器作为Markdown渲染器--最优雅的Markdown预览方案

如何扩展 Middleman 的 Redcarpet Markdown 渲染器?

CCF 201703-3 Markdown

CCF 201703-3 Markdown

CCF201703-3 Markdown

CCF 201703-3 Markdown