【负载均衡式在线OJ】加载题目信息(文件版)

devtools/2025/1/24 15:04:33/

目录

如何读取文件 -- 常见流程

代码


如何读取文件 -- 常见流程

  • 在C++中使用 std::ifstream来打开文件流是一个常见的操作,用于创建一个输入文件流,并尝试打开名为 question_list的文件。
  • if (!in.is_open())检查文件是否成功打开。如果文件未能打开,通常是因为路径错误或权限问题。
  • while (getline(in, line)):使用 getline函数逐行读取文件直到结束。每次读取一行并存储在line字符串中。
  • in.close();显式地关闭文件流。尽管在in对象离开其作用域时会自动调用close方法,但在某些情况下显式关闭可能更好,特别是当你想要立即释放资源或者在同一作用域内重复使用同一个流对象时。
#include <iostream>
#include <fstream>
#include <string>int main() {// 文件名const char* filename = "question_list.txt";// 创建输入文件流对象std::ifstream in(filename);// 检查文件是否成功打开if (!in.is_open()) {std::cerr << "无法打开文件: " << filename << std::endl;return 1; // 返回非零值表示程序异常终止}// 读取文件内容到字符串变量std::string line;while (getline(in, line)) // 使用getline逐行读取{ //读取该行内容,可以对根据内容处理数据}// 关闭文件流(当离开作用域时会自动调用close)in.close();return 0;
}

代码

OnlineJudge/oj_server/oj_model_file.hpp · zihuixie/负载均衡式在线OJ - 码云 - 开源中国https://gitee.com/zihuixie/load-balancing-online-oj/blob/master/OnlineJudge/oj_server/oj_model_file.hpp

#pragma once
#include <unordered_map>
#include <string>
#include <vector>
#include <fstream>
#include <cassert>#include "../comm/log.hpp"
#include "../comm/util.hpp"// 文件版本,从文件中读取题目信息namespace ns_model
{using namespace ns_log;using namespace ns_util;// 1 判断回文数 1 1 1000struct Question{std::string number; // 题号std::string title;  // 题目std::string star;   // 难度int cpu_limit;      // 时间限制int mem_limit;      // 空间限制std::string desc;   // 题目描述std::string header; // 提前预设的代码(用户未提交)std::string tail;   // 测试用例};const std::string question_path = "./questions/";               // 题库所在文件夹const std::string question_list = "./questions/questions/list"; // 题库清单class Model{private:// 题号->题目信息 的映射关系std::unordered_map<std::string, Question> questions;public:Model(){assert(LoadAllQuestions(question_list));}~Model(){}// 从清单中加载题目信息到哈希表中bool LoadAllQuestions(const std::string &question_list){std::ifstream in(question_list); // 打开流if (!in.is_open()) // 打开失败{LOG(FATAL) << " 加载题目列表失败,请检查是否存在题库文件 " << "\n";return false;}// 打开成功,开始读文件std::string line;std::vector<std::string> token;while (getline(in, line)){// 切割读到的字符串,并把字段插入到哈希表中// 1. 切割 line,把切割后的字段放入数组 token 中StringUtil::SplitString(line, &token, " ");// 2.把字段放入哈希表中//  1 判断回文数 1 1 1000if (token.size() != 5){LOG(WARNING) << " 部分题目格式错误,加载失败,请检查文件格式 " << "\n";continue;}Question q;q.number = token[0];q.title = token[1];q.star = token[2];q.cpu_limit = std::stoi(token[3]);q.mem_limit = std::stoi(token[4]);// ./questions/1/std::string path = question_path;path += q.number;path += "/";FileUtil::ReadFile(path + "desc.txt", &(q.desc), true);FileUtil::ReadFile(path + "header.hpp", &(q.header), true);FileUtil::ReadFile(path + "tail.hpp", &(q.tail), true);questions.insert({q.number, q});}LOG(INFO)<<" 加载题库成功 "<<"\n";in.close();}// 获取整个题库bool GetAllQuestions(std::vector<Question> *out){if (questions.empty()){LOG(ERROR) << " 用户获取题库失败 " << "\n";return false;}for (const auto &q : questions){out->push_back(q.second);}return true;}// 获取指定题目bool GetOneQuestion(const std::string &number, Question *out){if (questions.find(number) == questions.end()){LOG(ERROR) << "题目获取失败,题目编号:" << number << "\n";return false;}*out = questions[number];return true;}};
}


http://www.ppmy.cn/devtools/153161.html

相关文章

靠右行驶数学建模分析(2014MCM美赛A题)

笔记 题目 要求分析&#xff1a; 比较规则的性能&#xff0c;分为light和heavy两种情况&#xff0c;性能指的是 a.流量与安全 b. 速度限制等分析左侧驾驶分析智能系统 论文 参考论文 两类规则分析 靠右行驶&#xff08;第一条&#xff09;2. 无限制&#xff08;去掉了第一条…

【行空板K10】项目实践案例征集 跨学科案例 研究蒸发量

目录 项目来源 项目简介 项目知识点 项目原理 物联网硬件架构 硬件简介 硬件接线原理 硬件接线实物 实验流程 实验注意事项 程序截图 项目数据表 总结 本文首发于DF创客社区&#xff1a;项目实践案例征集 跨学科案例 行空板K10 研究蒸发量 DF创客社区https://mc.d…

计算机网络之运输层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 04 传输层 在网上看到其他人做了相关笔记&#xff0c;就不再多余写了&#xff0c;直接参考着学习吧。 王道考研 计算机网络笔记 第五章&#xff1a;传输层_王道计算机网络传输层_Baret-H的博客-CSDN博…

[Spring] Nacos详解

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

嵌入式知识点总结 C/C++ 专题提升(七)-位操作

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值&#xff0c;不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…

易语言模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

OpenCV: 深入理解OpenCV中CV_WRAP_AS宏及其作用

在 OpenCV 中&#xff0c;CV_WRAP_AS 是一个宏&#xff0c;主要用于 为 C 函数或运算符定义别名&#xff0c;以便在生成语言绑定时使用。这对于在不同的编程语言&#xff08;如 Python&#xff09;中使用 OpenCV 库时提供更友好的接口非常有用。尽管它在 C 代码中不会改变函数的…

MacOS/C/C++下怎样进行软件性能分析(CPU/GPU/Memory)

在macOS环境下进行C/C软件性能分析&#xff0c;可以使用多种工具和技术来测量和优化CPU、GPU和内存的性能。macOS提供了丰富的性能分析工具&#xff0c;如Instruments、gprof、Perf、以及NVIDIA和Intel的专用工具。下面详细介绍了实现思想和操作方法。 1. 性能分析的目标 CPU…