大模拟训练计划
Markdown编辑器
第十一次CCF-CSP计算机软件能力认证
题目传送门
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string get(string t)
{
int pos = 1;
while (t[pos] == ' ') pos ++ ;
string res;
int sz = t.size();
while (pos < sz) res += t[pos], pos ++ ;
return res;
}
int find(string str, string t)
{
int sz = str.size();
for (int i = 0; i < sz; i ++ )
if (str[i] == t[0])
return 0;
return -1;
}
void change1(string& t)
{
while (find(t, "_") != -1)
{
int pos = 0;
while (t[pos] != '_') pos ++ ;
t.erase(pos, 1);
t.insert(pos, "<em>");
pos = 0;
while (t[pos] != '_') pos ++ ;
t.erase(pos, 1);
t.insert(pos, "</em>");
}
}
void change2(string& t)
{
while (find(t, "[") != -1)
{
int pos = 0, st, ed;
while (t[pos] != '[') pos ++ ;
st = pos;
string res = "<a href=\"";
string Text, Link;
pos ++ ;
while (t[pos] != ']') Text += t[pos], pos ++ ;
pos += 2;
while (t[pos] != ')') Link += t[pos], pos ++ ;
ed = pos;
t.erase(st, ed - st + 1);
t.insert(st, res + Link + "\">" + Text + "</a>");
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
string t;
while (getline(cin, t))
{
while (!t.size())
if (!getline(cin, t)) return 0;
change1(t), change2(t);
if (t[0] == '#')
{
int sz = t.size();
int pos = 1;
int cnt = 1;
while (t[pos] == '#') pos ++, cnt ++ ;
while (t[pos] == ' ') pos ++ ;
string res = "";
while (pos < sz) res += t[pos], pos ++ ;
cout << "<h" << cnt << '>' << res << "</h" << cnt << ">\n";
if (!getline(cin, t)) return 0;
}
else if (find(t, "#") == -1 && find(t, "*") == -1)
{
cout << "<p>" << t;
if (!getline(cin, t)) return cout << "</p>\n", 0;
if (t.size()) cout << '\n';
while (t.size())
{
change1(t), change2(t);
cout << t;
if (!getline(cin, t)) return cout << "</p>\n", 0;
if (t.size()) cout << '\n';
}
cout << "</p>\n";
}
else if (t[0] == '*')
{
cout << "<ul>\n";
string str = get(t);
cout << "<li>" << str << "</li>\n";
if (!getline(cin, t)) return cout << "</ul>\n", 0;
while (t.size())
{
change1(t), change2(t);
str = get(t);
cout << "<li>" << str << "</li>\n";
if (!getline(cin, t)) return cout << "</ul>\n", 0;
}
cout << "</ul>\n";
}
}
return 0;
}