(C++)集合数据文件存储工具

前言

一个简单的实现简便 "map集合" 数据存储本地。

适合不会SQL但又想实现数据存储本地的同学。

操作使用都非常简单。

文件只做了简单的加密处理,如果需要复杂加密的同学可以修改加密函数。

 

项目结构

62f2e810947a408c99bb4a3077b95afc.png

 

1.创建头文件——CAB.h

//
// Created by xw on 2024/2/7.
//

#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>
using namespace std;
#ifndef UNTITLED_FUN_H
#define UNTITLED_FUN_H


//数据库 结构体
struct DataBase
{

    //文件写入
    void write(string road,map<string,string>maps){

        //创建文件输出流对象
        ofstream ofs;

        //打开文件,若文件不存在则创建文件
        ofs.open(road);

        //将maps转换成字符串
        string s = transferStr(maps);

        //加密处理
        
        
        //写入字符串到文件
        ofs<<s;

        //关闭文件
        ofs.close();

        //cout<<"---文件写入完毕---"<<endl;


    }

    //将maps转换成字符串
    string transferStr(map<string,string> maps){
        string s="";
        map<string, string>::iterator  iter;
        for(iter = maps.begin(); iter != maps.end(); iter++)
        {
            s= s + iter->first + "*" + iter->second + "\n";
        }
        return s;
    }

    //读取文件
    map<string,string> read(string road){

        //定义集合
        map<string,string> maps;

        //定义文件流
        ifstream ifs;

        //打开文件
        ifs.open(road);

        //定义字符串
        string buffer;

        //循环得到结果
        while (getline(ifs,buffer)){
            //定义key value
            string key;
            string value;

            //获取内容长度
            int len = buffer.length();

            //处理buffer
            buffer=buffer.substr(0,len);

            //测试输出字符串
            //cout<<buffer<<endl;

            for (int i = 0; i < len; ++i) {
                if (buffer[i]=='*'){
                    key = buffer.substr(0,i);
                    value = buffer.substr(i+1,len);
                    //cout<<key<<" "<<value<<endl;
                    maps[key]=value;
                }
            }

        }

        //关闭文件
        ifs.close();

        //cout<<"---文件读取完毕---"<<endl;

        return maps;
    }

    //加密
    string encrypt(string s){
        //字符串长度
        int length = s.length();

        //
        string newS = "";

        //加密
        for (int i = 0; i < length; i++) {
            s[i] = char (s[i] + 1);
            //cout<<s[i];
            newS = newS + s[i];
        }

        cout<<newS<<endl;

        //返回加密字符串
        return newS;
    }

    //解密
    string decrypt(string s){
        //字符串长度
        int length = s.length();

        //
        string newS = "";

        //解密
        for (int i = 0; i < length; i++) {
            s[i] = char (s[i] - 1);
            //cout<<s[i];
            newS = newS + s[i];
        }

        cout<<newS<<endl;

        //返回解密字符串
        return newS;
    }

};





#endif //UNTITLED_FUN_H

 

2.测试使用代码——main.cpp

#include <map>
#include "CAB.h"
using namespace std;

int main() {
    //定义结构体对象
    DataBase dataBase;

    //定义map集合
    map<string ,string >maps;

    //向maps中添加元素
    //key值和value值只能是字符串
    maps["zhangsan"]="zhangsan";
    maps["lisi"]="lisi";
    maps["wangwu"]="wangwu";

    //向数据库中写入maps集合
    dataBase.write("test.txt",maps);

    //从数据库中拿数据
    map<string ,string >tempMaps;
    tempMaps = dataBase.read("test.txt");


    cout<<"打印数据tempMaps:"<<endl;

    //遍历打印
    map<string, string>::iterator  iter;
    for(iter = tempMaps.begin(); iter != tempMaps.end(); iter++)
    {
        cout<<iter->first<<" "<<iter->second<<endl;
    }

    /*
    dataBase.encrypt("hello world");
    dataBase.decrypt("ifmmp!xpsme");
     */

    return 0;
}

 

3.效果展示

控制台输出

791afd4240d443e0ba95bfafca89c0cd.png

数据成功保存到文件中

6c20509dce7e42f29d6da7d50402827e.png

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python编程之旅:从入门到精通

在数字世界的无尽宇宙中&#xff0c;Python无疑是一颗璀璨的明星。其简洁易懂的语法、丰富的库和广泛的应用领域&#xff0c;使得Python成为了众多初学者的首选编程语言。那么&#xff0c;如何学习Python呢&#xff1f;本文将带你一步步踏上Python编程的旅程。 一、入门篇&…

本地运行多种大语言模型:一行代码即可完成 | 开源日报 No.167

ollama/ollama Stars: 33.5k License: MIT ollama 是一个轻量级、可扩展的本地语言模型构建和运行框架。 提供简单的 API 用于创建、运行和管理模型包含丰富的预构建模型库&#xff0c;方便在各种应用中使用支持从 GGUF、PyTorch 或 Safetensors 导入自定义模型可以通过命令行…

C语言rand随机数知识解析和猜数字小游戏

rand随机数 rand C语言中提供了一个可以随机生成一个随机数的函数&#xff1a;rand&#xff08;&#xff09; 函数原型&#xff1a; int rand(void);rand函数返回的值的区间是&#xff1a;0~RAND_MAX(32767)之间。大部分编译器都是32767。 #include<stdlib.h> int ma…

探索Spring Validation:优雅实现后端数据验证的艺术

在现代Web应用开发中&#xff0c;数据验证是一项至关重要的任务&#xff0c;确保应用程序接收到的用户输入符合预期规范&#xff0c;不仅能够提高系统的健壮性&#xff0c;也能有效防止潜在的安全漏洞。Spring Framework通过其内置的Spring Validation模块&#xff0c;为我们提…

中国判决生效,诺基亚全面与中国手机签署授权协议,降低专利费

日前媒体报道指诺基亚与中国两家手机企业都签署了专利授权协议&#xff0c;全面结束诉讼&#xff0c;而这一切正是在OPPO于去年底在重庆法院就OPPO与诺基亚的专利费诉讼问题&#xff0c;做出裁决之后&#xff0c;要求诺基亚按公平、公正等合理收费原则收取专利费。 这几年诺基亚…

如何从 Windows 硬盘恢复丢失或删除的照片

您是否曾经不小心删除了无法再恢复的重要照片&#xff1f;如果这是您的商务或家庭照片、婚礼或童年回忆或者亲人的照片怎么办&#xff1f; 根据我们的经验&#xff0c;用户在清理计算机以提高存储/速度时通常会遇到此类事故&#xff0c;并最终删除包含重要图片的文件夹&#x…

Linux--基础开发工具篇(2)(vim)(配置白名单sudo)

目录 前言 1. vim 1.1vim的基本概念 1.2vim的基本操作 1.3vim命令模式命令集 1.4vim底行命令 1.5 异常问题 1.6 批量注释和批量去注释 1.7解决普通用户无法sudo的问题 1.8简单vim配置 前言 在前面我们学习了yum&#xff0c;也就是Linux系统的应用商店 Linux--基础开…

专业135+总400+中国科学院大学859国科大信号与系统考研经验电子信息与通信,真题,大纲,参考书

今年考研专业课859信号与系统135&#xff0c;总分400上岸国科大&#xff0c;总结一下自己这一年的复习经验&#xff0c;希望对后面报考中科院大学的同学有所帮助。 专业课&#xff1a; 国科大不同研究所都是统一命题&#xff0c;859信号与系统的参考书目是郑君里的《信号与系…

windows 下安装gin

go install 执行命令&#xff0c;执行不了的参考一下 https://blog.csdn.net/weixin_42592326/article/details/135946806 Golang 中没法下载第三方包解决办法-CSDN博客 go install github.com/gin-gonic/ginlatest 还是安装不了的话&#xff0c;用手机开热点&#xff0c;电…

73. 矩阵置零(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入&#xff1a; matrix [[1,1,1],[1,0,…

react函数组件中使用context

效果 1.在父组件中创建一个createcontext并将他导出 import React, { createContext } from react import Bpp from ./Bpp import Cpp from ./Cpp export let MyContext createContext(我是组件B) export let Ccontext createContext(我是组件C)export default function App…

Hive正则表达式

Hive版本&#xff1a;hive-3.1.2 一、Hive的正则表达式概述 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本模式。 Hive的正则表达式灵活使用解决HQL开发过程中的很多问题&#xff0c;本篇文…

08-OpenFeign-结合Sentinel,实现熔断降级

当我们在对服务远程调用时&#xff0c;会因为服务的请求超时、抛出异常等情况&#xff0c;导致调用失败。 如果短时间内&#xff0c;产生大量请求异常。引发上游的调用方请求积压&#xff0c;最终会引起整个调用链雪崩。 为此我们需要对核心的调用过程进行监控&#xff0c;当…

自适应二次元404页面源码

自适应二次元404页面源码&#xff0c;HTMLCSSJS,喜欢二次元的朋友可以下载使用 蓝奏云&#xff1a;https://wfr.lanzout.com/iuPNQ1ns7dxg

数据结构——6.2 图的存储与基本操作

6.2 图的存储与基本操作 概念 图的存储 邻接矩阵存有向图和无向图 根据邻接矩阵求度&#xff1a; 无向图&#xff1a;第i个结点的度 第i行 (或第列) 的非零元素个数 有向图&#xff1a; 第i个结点的出度 第i行的非零元素个数 第i个结点的入度 第i列的非零元素个数 第i个结…

刘谦春晚纸牌魔术背后的数学—海明码原理简介

在昨天2024年的春晚舞台上&#xff0c;魔术大师刘谦以一场令人拍案叫绝的纸牌魔术再度震撼全场。他巧妙地利用了数学原理&#xff0c;精准无误地让观众“随机”选择的纸牌完成了配对&#xff0c;尤其是令人忍俊不禁的是主持人尼格买提的纸牌却没有如愿配对&#xff0c;小尼碎了…

Linux操作系统基础(七):Linux常见命令(二)

文章目录 Linux常见命令&#xff08;二&#xff09; 一、kill命令 二、ifconfig命令 三、clear命令 四、重启与关机命令 五、which命令 六、hostname命令 七、grep命令 八、|管道 九、useradd命令 十、userdel命令 十一、tar命令 十二、su命令 十三、ps命令 Linu…

最适合新手的SpringBoot+SSM项目《苍穹外卖》实战—(一)项目概述

黑马程序员最新Java项目实战《苍穹外卖》&#xff0c;最适合新手的SpringBootSSM的企业级Java项目实战。 项目简介 《苍穹外卖》项目的定位是一款为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的软件产品。该项目是一个在线外卖订购系统&#xff0c;顾客可以通过网站或者…

CSP-202009-2-风险人群筛查

CSP-202009-2-风险人群筛查 解题思路 检查是否经过高危区 (x > x1) && (x < x2) && (y > y1) && (y < y2) 检查坐标是否在高危区域内&#xff0c; !isPassed 确保仅在第一次经过高危区域时增加 pass 计数。如果条件成立&#xff0c;表示…

第3集《佛说四十二章经》

和尚尼慈悲、诸位法师、诸位同学&#xff0c;阿弥陀佛&#xff01; 请大家打开讲议第四面&#xff0c;三、随文释义。 前面讲到本经的修学纲要是顿渐兼收&#xff0c;理事无碍。本经的修学有两个主题&#xff1a; (一)顿教法门&#xff1a; 顿教法门是一种智慧的观照。修学…