7.建立文件版题库|编写model文件|使用boost split字符串切分(C++)

建立文件版题库

  1. 题目的编号
  2. 题目的标题
  3. 题目的难度
  4. 题目的描述,题面
  5. 时间要求(内部处理)
  6. 空间要求(内部处理)
    两批文件构成
  7. 第一个:questions.list : 题目列表(不需要题目的内容)
  8. 第二个:题目的描述,题目的预设置代码(header.cpp), 测试用例代码(tail.cpp)
    这两个内容是通过题目的编号,产生关联的
    ![[Pasted image 20250224161817.png]]
题目1判断回文数

question.list

1 判断回文数 简单 ? 1 30000

desc.txt

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121
输出: true
示例 2:输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:你能不将整数转为字符串来解决这个问题吗?

header.cpp

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>using namespace std;class Solution{public:bool isPalindrome(int x){//将你的代码写在下面return true;}
};

tail.cpp

#ifndef COMPILER_ONLINE
#include "header.cpp"
#endifvoid Test1()
{// 通过定义临时对象,来完成方法的调用bool ret = Solution().isPalindrome(121);if(ret){std::cout << "通过用例1, 测试121通过 ... OK!" << std::endl;}else{std::cout << "没有通过用例1, 测试的值是: 121"  << std::endl;}
}void Test2()
{// 通过定义临时对象,来完成方法的调用bool ret = Solution().isPalindrome(-10);if(!ret){std::cout << "通过用例2, 测试-10通过 ... OK!" << std::endl;}else{std::cout << "没有通过用例2, 测试的值是: -10"  << std::endl;}
}int main()
{Test1();Test2();return 0;
}

OJ不是只把header.cpp的代码提交给compile_and_run, 而是把header.cpp和tail.cpp合并成一个文件,最终提交给后台编译运行服务的代码是

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>using namespace std;class Solution{public:bool isPalindrome(int x){//将你的代码写在下面return true;}
};#ifndef COMPILER_ONLINE
#include "header.cpp"
#endifvoid Test1()
{// 通过定义临时对象,来完成方法的调用bool ret = Solution().isPalindrome(121);if(ret){std::cout << "通过用例1, 测试121通过 ... OK!" << std::endl;}else{std::cout << "没有通过用例1, 测试的值是: 121"  << std::endl;}
}void Test2()
{// 通过定义临时对象,来完成方法的调用bool ret = Solution().isPalindrome(-10);if(!ret){std::cout << "通过用例2, 测试-10通过 ... OK!" << std::endl;}else{std::cout << "没有通过用例2, 测试的值是: -10"  << std::endl;}
}int main()
{Test1();Test2();return 0;
}

下面的代码,我们不想让编译器编译的时候,保留它,而是裁剪掉
(g++ -D COMPILER_ONLINE)
仅仅是为了让我们设计测试用例的时候,不要报错

#ifndef COMPILER_ONLINE
#include "header.cpp"
#endif
题目2求最大值

question.list

1 判断回文数 简单 1 30000
2 求最大值 简单 1 30000

desc.txt

求最大值,比如:vector v ={1,2,3,4,5,6,12,3,4,-1};
求最大值, 比如:输出 12

header.cpp

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;class Solution
{
public:int Max(const vector<int> &v){//将你的代码写在下面return 0;}
};

tail.cpp

#ifndef COMPILER_ONLINE
#include "header.cpp"
#endifvoid Test1()
{vector<int> v = {1, 2, 3, 4, 5, 6};int max = Solution().Max(v);if (max == 6){std::cout << "Test 1 .... OK" << std::endl;}else{std::cout << "Test 1 .... Failed" << std::endl;}
}void Test2()
{vector<int> v = {-1, -2, -3, -4, -5, -6};int max = Solution().Max(v);if (max == -1){std::cout << "Test 2 .... OK" << std::endl;}else{std::cout << "Test 2 .... Failed" << std::endl;}
}int main()
{Test1();Test2();return 0;
}

编写model文件

代码框架

oj_model.hpp

#pragma once#include "../comm/log.hpp"#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <cassert>// 根据题目list文件,加载所有的题目信息到内存中
// model: 主要用来和数据进行交互,对外提供访问数据的接口namespace ns_model
{using namespace std;using namespace ns_log;struct Question{std::string number; //题目编号,唯一std::string title;  //题目的标题std::string star;   //难度: 简单 中等 困难int cpu_limit;      //题目的时间要求(S)int mem_limit;      //题目的空间要去(KB)std::string desc;   //题目的描述std::string header; //题目预设给用户在线编辑器的代码std::string tail;   //题目的测试用例,需要和header拼接,形成完整代码};const std::string question_list = "./questions/questions.list"class Model{private://题号:题目细节unordered_map<string, Question> questions;public:Model(){assert(LoadQuestionList());}LoadQuestionList(const std::string &question_list){//加载配置文件:questions/questions.list}void GetAllQuestions(vector<Question> *out){}void GetOneQuestion(const std::string &number, Question *q){}~Model(){}};
}
完整

oj_model.hpp

#pragma once
//文件版本
#include "../comm/util.hpp"
#include "../comm/log.hpp"#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <fstream>
#include <cstdlib>
#include <cassert>// 根据题目list文件,加载所有的题目信息到内存中
// model: 主要用来和数据进行交互,对外提供访问数据的接口namespace ns_model
{using namespace std;using namespace ns_log;using namespace ns_util;struct Question{std::string number; //题目编号,唯一std::string title;  //题目的标题std::string star;   //难度: 简单 中等 困难int cpu_limit;      //题目的时间要求(S)int mem_limit;      //题目的空间要去(KB)std::string desc;   //题目的描述std::string header; //题目预设给用户在线编辑器的代码std::string tail;   //题目的测试用例,需要和header拼接,形成完整代码};const std::string questins_list = "./questions/questions.list";const std::string questins_path = "./questions/";class Model{private://题号 : 题目细节unordered_map<string, Question> questions;public:Model(){assert(LoadQuestionList(questins_list));}bool LoadQuestionList(const string &question_list){//加载配置文件: questions/questions.list + 题目编号文件ifstream in(question_list);if(!in.is_open()){LOG(FATAL) << " 加载题库失败,请检查是否存在题库文件" << "\n";return false;}string line;while(getline(in, line)){vector<string> tokens;StringUtil::SplitString(line, &tokens, " ");// 1 判断回文数 简单 1 30000if(tokens.size() != 5){LOG(WARNING) << "加载部分题目失败, 请检查文件格式" << "\n";continue;}Question q;q.number = tokens[0];q.title = tokens[1];q.star = tokens[2];q.cpu_limit = atoi(tokens[3].c_str());q.mem_limit = atoi(tokens[4].c_str());string path = questins_path;path += q.number;path += "/";FileUtil::ReadFile(path+"desc.txt", &(q.desc), true);FileUtil::ReadFile(path+"header.cpp", &(q.header), true);FileUtil::ReadFile(path+"tail.cpp", &(q.tail), true);questions.insert({q.number, q});}LOG(INFO) << "加载题库...成功!" << "\n";in.close();return true;}bool GetAllQuestions(vector<Question> *out){if(questions.size() == 0){LOG(ERROR) << "用户获取题库失败" << "\n";return false;}for(const auto &q : questions){out->push_back(q.second); //first: key, second: value}return true;}bool GetOneQuestion(const std::string &number, Question *q){const auto& iter = questions.find(number);if(iter == questions.end()){LOG(ERROR) << "用户获取题目失败, 题目编号: " << number << "\n";return false;}(*q) = iter->second;return true;}~Model(){}};
} // namespace ns_model
使用boost split字符串切分

安装boost库

sudo yum install -y boost-devel

测试

#include <iostream>
#include <vector>
#include <boost/algorithm/string.hpp>
int main()
{std::vector<std::string> tokens;const std::string str = "1:判断回文数::::::简单:1:30000";const std::string sep = ":";boost::split(tokens, str, boost::is_any_of(sep), boost::algorithm::token_compress_on);for(auto &iter : tokens){std::cout << iter << std::endl;}}

编译

g++ test.cc  -std=c++11

![[Pasted image 20250224203228.png]]

#include <iostream>
#include <vector>
#include <boost/algorithm/string.hpp>
int main()
{std::vector<std::string> tokens;const std::string str = "1:判断回文数::::::简单:1:30000";const std::string sep = ":";boost::split(tokens, str, boost::is_any_of(sep), boost::algorithm::token_compress_off);for(auto &iter : tokens){std::cout << iter << std::endl;}}

![[Pasted image 20250224203521.png]]

util.hpp

    class StringUtil{public:/************************************** str: 输入型,目标要切分的字符串* target: 输出型,保存切分完毕的结果* sep: 指定的分割符* **********************************/static void SplitString(const std::string &str, std::vector<std::string> *target, const std::string &sep){//boost splitboost::split((*target), str, boost::is_any_of(sep), boost::algorithm::token_compress_on);}};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23621.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW中CFURL.llb 工具库说明

CFURL.llb 是 LabVIEW 2019 安装目录下 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\ 路径下的工具库&#xff0c;主要用于处理 LabVIEW 与 URL 相关的操作&#xff0c;涵盖 URL 解析、HTTP 请求发送、数据传输等功能模块&#xff0c;帮助开发者…

网络运维学习笔记 017 HCIA-Datacom综合实验01

文章目录 综合实验1实验需求总部特性 分支8分支9 配置一、 基本配置&#xff08;IP二层VLAN链路聚合&#xff09;ACC_SWSW-S1SW-S2SW-Ser1SW-CoreSW8SW9DHCPISPGW 二、 单臂路由GW 三、 vlanifSW8SW9 四、 OSPFSW8SW9GW 五、 DHCPDHCPGW 六、 NAT缺省路由GW 七、 HTTPGW 综合实…

6.✨Python学习价值与优势分析

✨Python 是一种值得深入学习的编程语言&#xff0c;其设计哲学、广泛的应用场景以及强大的社区支持使其成为当今最受欢迎的编程语言之一。以下从多个角度分析为什么 Python 值得深入学习&#xff1a; 1.&#x1f98b; 简洁易学的语法 Python 以简洁、可读性强著称&#xff0c…

Android Audio其他——数字音频接口(附)

数字音频接口 DAI,即 Digital Audio Interfaces,顾名思义,DAI 表示在板级或板间传输数字音频信号的方式。相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI 在音频电路设计中得到越来越广泛的应用。 一、音频链路 1、模拟音频信号 可以看到在传统的…

Spring AI + Ollama 实现调用DeepSeek-R1模型API

一、前言 随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;在各个领域的应用越来越广泛。DeepSeek 作为一款备受瞩目的国产大语言模型&#xff0c;凭借其强大的自然语言处理能力和丰富的知识储备&#xff0c;迅速成为业界关注的焦点。无论是文本生…

2.3 变量

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 变量是用来存放某个值的数据&#xff0c;它可以表示一个数字、一个字符串、一个结构、一个类等。变量包含名称、类型和值。在代码中…

LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师

背景 前面的文章通过 Ollama 私有化部署了 Qwen2.5 (7B) 模型&#xff0c;然后使用 Docker Compose 一键部署了 Dify 社区版平台。 LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库&#xff1a;在 Dify 平台上&#xff0c;通过普通编排的方式&#xff0c;创建了基于…

ESP32S3:参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路 (实现各个平台移植使用该方式)

目录 引言使用SPI + DMA 方式实现思路分析1. 查看WS2812的datasheet手册2. 根据官方的led_strip组件的方式,自己手把手实现一遍3.完整的程序(实现霓虹灯效果)引言 参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路,只有明白实现的思路,方能将其…

工程师 - VSCode的AI编码插件介绍: MarsCode

豆包 MarsCode MarsCode AI: Coding Assistant Code and Innovate Faster with AI 豆包 MarsCode - 编程助手 安装完成并使能后&#xff0c;会在下方状态栏上显示MarsCode AI。 安装完并重启VSCode后&#xff0c;要使用这个插件&#xff0c;需要注册一下账号。然后授权VSCod…

DPVS-5: 后端服务监控原理与测试

后端监控原理 被动监测 DPVS自带了被动监控&#xff0c;通过监控后端服务对外部请求的响应情况&#xff0c;判断服务器是否可用。 DPVS的被动监测&#xff0c;并不能获取后端服务器的详细情况&#xff0c;仅仅通过丢包/拒绝情况来发觉后端服务是否可用。 TCP session state…

Tag标签的使用

一个非常适合运用在vue项目中的组件&#xff1a;Tag标签。 目录 一、准备工作 1、安装element-plus库 2、配置element-plus库 二、Tag标签入门 1、打开element官网&#xff0c;搜索tag标签 2、体验Tag标签的基础用法 三、Tag标签进阶训练1 1、定义一个数组&#xff0c;…

算法-图-数据结构(邻接矩阵)-BFS广度优先遍历

邻接矩阵广度优先遍历&#xff08;BFS&#xff09;是一种用于遍历或搜索图的算法&#xff0c;以下是具体介绍&#xff1a; 1. 基本概念 图是一种非线性的数据结构&#xff0c;由顶点和边组成&#xff0c;可分为无向图、有向图、加权图、无权图等。邻接矩阵是表示图的一种数…

Ryu:轻量开源,开启 SDN 新程

1. Ryu 控制器概述 定位&#xff1a;轻量级、开源的SDN控制器&#xff0c;专为开发者和研究人员设计&#xff0c;基于Python实现。开发者&#xff1a;由日本NTT实验室主导开发&#xff0c;遵循Apache 2.0开源协议。核心理念&#xff1a;简化SDN应用开发&#xff0c;提供友好的…

内容中台架构下智能推荐系统的算法优化与分发策略

内容概要 在数字化内容生态中&#xff0c;智能推荐系统作为内容中台的核心引擎&#xff0c;承担着用户需求与内容资源精准匹配的关键任务。其算法架构的优化路径围绕动态特征建模与多模态数据融合展开&#xff0c;通过深度强化学习技术实现用户行为特征的实时捕捉与动态更新&a…

【odoo18-文件管理】在uniapp上访问odoo系统上的图片

在uniapp上访问odoo系统上的图片 1、以url的形式访问 a&#xff1a;以odoo本身的域名&#xff0c;比如http://127.0.0.1:8069/web/image/product.template/3/image_128?unique1740380422000&#xff0c;这种方式需要解决跨域的问题。 b&#xff1a;以文件服务器的形式&…

DeepSeek掘金——基于DeepSeek-R1构建文档问答机器人

DeepSeek掘金——基于DeepSeek-R1构建文档问答机器人 在这个项目中,我们将结合本地 AI 的隐私与 Deepseek R1 的智能,创建一个完全本地化、推理驱动的问答机器人。 在人工智能 (AI) 日益融入我们日常生活的时代,一个问题仍然处于最前沿:隐私。尽管基于云的 AI 系统功能强大…

计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

将maya模型物体材质转化为面材质

将maya模型物体材质转化为面材质&#xff0c;以在导出abc时继承材质信息&#xff1b; 运行一下python代码&#xff1a; import maya.cmds as cmds objListcmds.ls(slTrue) for obj in objList:shapeNodeNamecmds.listRelatives(obj, shapesTrue)sgNodesListcmds.listConnecti…

数据库面试题(基础常考!!!)

在数据库领域&#xff0c;无论是日常开发还是面试场景&#xff0c;都有一些高频且重要的问题需要我们深入理解和掌握。本文将对这些常见面试题进行详细阐述&#xff0c;帮助大家更好地应对面试和实际工作中的挑战。 面试题一&#xff1a;三范式详解 什么是三范式 三范式是关…

论文笔记(七十二)Reward Centering(三)

Reward Centering&#xff08;三&#xff09; 文章概括摘要3 基于值的奖励中心化4 案例研究&#xff1a; 以奖励为中心的 Q-learning5 讨论、局限性与未来工作致谢 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan…