⭐⭐201703-3 Markdown

2024-02-27 12:58
文章标签 markdown 201703

本文主要是介绍⭐⭐201703-3 Markdown,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SOS写了两个小时只得了10分,居敏!

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include <map>
#include<string>
using namespace std;
string line, text;
int pos1,pos2,pos3,pos;
int num;//记录数字
// 段落处理
string temptext;
string link;
int i;
void solve()
{  //首先处理强调pos1 = 0;num=0;for (pos1 = text.find("_", pos1); pos1 != string::npos; pos1= text.find("_", pos1 )){//printf("pos1=%d\n",pos1);num++;if(num&1)//如果是奇数text.replace(pos1, 1, "<em>");elsetext.replace(pos1, 1, "</em>");pos1++;}//处理超级链接pos = pos2 = pos3 = 0;pos1 = text.find("[",pos);pos2 = text.find("](", pos1);pos3 = text.find(")",pos2);for (;pos1!=-1&&pos2!=-1&&pos3!=-1;){temptext = text.substr(pos1+1,pos2-pos1-1);link = text.substr(pos2+2,pos3-pos2-2);text.replace(pos1,pos3-pos1+1,"<a href=\""+link+"\">"+temptext+"</a>");pos = pos3 + 1;pos1 = text.find("[", pos);pos2 = text.find("](", pos1);pos3 = text.find(")", pos2);}//下面处理区块//是标题if (text[0] == '#')//是标题{//printf("是标题\n");for (i = 0; i < text.length(); i++){if (text[i] != '#')break;}        char c[5];c[0] = '<';c[1] = 'h';c[2] = i+'0';c[3] = '>';c[4] = '\0';while (text[i] == ' ')//还是空格的时候{           i++;}text.replace(0,i,c);text.insert(text.length() - 1, c);}else  if (text[0] == '*')//是无序列表{//printf("是无序列表\n"); // cout << "处理前" << text << endl;text.insert(0, "<ul>\n");pos1 = 1;pos1 = text.find("\n");int num = 0;for (; pos1 != -1; pos1 = text.find("\n*", pos1 + 5)){//printf("pos1=%d\n",pos1);num++;if (num & 1)//是奇数{text.replace(pos1 + 1, 1, "<li>");//cout << text << endl;i = pos1+5;while (text[i] == ' '){i++;}// printf("i=%d\n",i);text.erase(pos1 + 5, i-pos1-5);//  cout << text << endl;}else//是偶数{text.insert(pos1, "</li>");}        }text.insert(text.length()-1, "</li>\n</ul>\n");}else//是普通段落{// printf("是普通段落\n");text.insert(0,"<p>");text.insert(text.length()-1, "</p>");}cout << text << endl;text = "";//text重新清零
}int main()
{bool flag = false;getline(cin, line);//这样逐行输入line,其实处理的是text,并且没有忘记换行符号for (; ;) {if (line.size() > 0)text += line + "\n";else if (line.size() == 0 && text.size() > 0){// cout<<"开始处理"<<endl;solve();}if (flag) break;if (!getline(cin, line)) {flag = true;line = "";}}return 0;
}

参考链接
还是自己的思路不够清晰,搞太复杂了,经典的字符串处理啊啊啊!

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include <map>
#include<string>
/* CCF201703-3 Markdown */
using namespace std;
string line, text;
// 段落处理
void solve()
{// 处理下划线:标签<em></em>int leftp = text.find("_");while (leftp != string::npos) {text.replace(leftp, 1, "<em>");int rightp = text.find("_", leftp);text.replace(rightp, 1, "</em>");leftp = text.find("_", rightp);}// 处理方括号leftp = text.find("[");while (leftp != string::npos) {int rightp = text.find("]", leftp);int leftp2 = text.find("(", rightp);int rightp2 = text.find(")", leftp2);string tmp = text.substr(leftp + 1, rightp - leftp - 1);string tmp2 = text.substr(leftp2 + 1, rightp2 - leftp2 - 1);text.replace(text.begin() + leftp, text.begin() + rightp2 + 1, "<a href=\"" + tmp2 + "\">" + tmp + "</a>");leftp = text.find("[", rightp2);}if (text[0] == '#') {// 处理#:标签<h></h>int i = 0;while (text[i] == '#') i++;//这里的string好像转换成了字符类型text = "<h" + string(1, '0' + i) + ">" + text.substr(i + 1);text.insert(text.size() - 1, "</h" + string(1, '0' + i) + ">");}else if (text[0] == '*') {// 处理*:标签<ul><li></li>......</ul>text.insert(0, "<ul>\n");text.insert(text.size(), "</ul>\n");int leftp = text.find("*");while (leftp != string::npos) {int rightp = text.find("\n", leftp);text.insert(rightp, "</li>");text.replace(leftp, 2, "<li>");leftp = text.find("*", rightp);}}else {// 处理段落:<p></p>text = "<p>" + text.substr(0, text.size() - 1) + "</p>\n";}cout << text;text = "";
}int main()//注意这里的输入很重要!
{bool flag = false;getline(cin, line);for (; ;) {if (line.size() > 0)text += line + "\n";else if (line.size() == 0 && text.size() > 0)solve();if (flag) break;if (!getline(cin, line)) {flag = true;line = "";}}return 0;
}

这篇关于⭐⭐201703-3 Markdown的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752468

相关文章

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

使用Python实现网页表格转换为markdown

《使用Python实现网页表格转换为markdown》在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,本文将使用Python编写一个网页表格转Markdown工具,需... 在日常工作中,我们经常需要从网页上复制表格数据,并将其转换成Markdown格式,以便在文档、邮件或

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma