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预览方案