c++文件操作(2)-- 按照指定格式读写文件

目录

按照指定格式写文件

代码说明:  

按照指定格式读文件 -- 解析一定格式的字符串

代码说明: 

注意: 

问: 为什么使用getline()?


 

按照指定格式写文件

在实际开发中,我们以一定的格式写入文件当中。 

其实就是使用stringstream类对象来实现。

#include <iostream>
#include <stdlib.h>
#include <sstream>
#include <fstream>
#include <string>

using namespace std;

int main(void) {

	ofstream io;
	stringstream ret;

	string name = "张三";
	int age = 18;

	io.open("data.txt");

	if (!io.is_open()) return 1;

	ret << "姓名: " << name << " 年龄:" << age << endl;

	io << ret.str();

	io.close();

	system("pause");

	return 0;
}

 

代码说明:  

大部分操作和写文件类似,只是此处我们使用了,stringstream ret对象来实现将数据以一定的格式拼接起来(和C语言中的sprintf类似),然后将其转化成字符串,写入到文件中。

以这样的方式可以很方便的以一定格式将数据写入文件中。 

 

按照指定格式读文件 -- 解析一定格式的字符串

我们上面以一定的格式将数据写入到了文件中,但是我们应该怎样读这些数据呢? 

首先,要明确,像"姓名:  张三   年龄:  18 " 这样的数据,我们程序中(内存)只需要张三和18,那么如何将数据从规定格式的字符串中解析出来呢?

在C语言中,我们使用sprintf()来拼接字符串,使用sscanf()来解析字符串。但是c++中只提供了stringstream类实现拼接,并没有提供提供解析的方法。 所以,我们需要借助C语言的sscanf()来解析读取到的字符串。 

代码:   

int main(void) {

	ifstream io;
	// 用于存放从文件中读取的字符串(未解析)
	string data;

	// 用于存储解析的数据
	char name[32];
	int age = 0;

	io.open("data.txt");

	if (!io.is_open()) return 1;

	getline(io,data);  // 读取一行

	// 将字符串中对应的数据存放到name和age中去
	sscanf_s(data.c_str(), "姓名: %s 年龄: %d", name,sizeof(name), &age);

	cout << name << " " << age << endl;

	io.close();

	system("pause");

	return 0;
}

代码说明: 

上面我们给文件中按照一定格式写入了数据,我们先将这些数据读取出来(字符串),存放到data变量中。 

然后我们使用sscanf(vs中使用sscanf_s)来进行解析,将我们需要的数据解析到,name和age当中。 

sscanf解析字符串中必须格式和data中数据的格式相同(空白字符不需要,因为sscanf可以自动跳过空白字符,只要其它字符对应就行) 。需要解析出的数据,直接用格式化占位符代替,然后在后面写上用于存储的解析出数据的对应变量。

注意: 

我们代码中使用getline()函数来读取文件中的数据,表示一次读取一行。 

有两个参数,第一个参数表示,从哪里读取,第二个参数是存放读取到数据的变量。 

问: 为什么使用getline()?

1.  就是我们需要读取一行数据的时候就使用getline就行。 

2. cin >> 和scanf()类似,都是遇到空白字符结束读取,如果一条数据中存在空白字符,那么使用cin >> 就无法读取完整的数据。  所以此时使用getline()。 

3.  上面的输入格式是,一条数据占一行,而且数据之间存在空白字符,所以使用getline读取。因为只有按照相同的格式才能正确的解析出来数据。(所以要按照写入的格式读取) 

 

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

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

相关文章

【vite】找不到模块“vite”或其相应的类型声明

今天在用vite搭建项目时&#xff0c;在vite.config.ts文件中 ts报错找不到模块“vitejs/plugin-vue”或其相应的类型声明。 原因&#xff1a;项目中缺少了相应的依赖包或 TypeScript 类型声明。可以按照以下步骤进行检查&#xff1a; 1. 确保安装了相应的依赖包 如果在pack…

Unity中URP下获取额外灯数量

文章目录 前言一、SimpleLit下额外灯数量的获取1、在 SimpleLit 下&#xff0c;先获取了额外灯的数量2、对其进行循环计算每一个额外灯3、GetAdditionalLightsCount在这里插入图片描述 二、GetAdditionalLightsCount实现了什么1、_AdditionalLightsCount.x2、unity_LightData.y…

Tarjan 算法(超详细!!)

推荐在 cnblogs 上阅读 Tarjan 算法 前言 说来惭愧&#xff0c;这个模板仅是绿的算法至今我才学会。 我还记得去年 CSP2023 坐大巴路上拿着书背 Tarjan 的模板。虽然那年没有考连通分量类似的题目。 现在做题遇到了 Tarjan&#xff0c;那么&#xff0c;重学&#xff0c;开…

防御课程—华为USG6000V1的配置实验(一)

实验拓扑&#xff1a; 实验分析 由实验拓扑图需求分析可知我们在生产区和办公区需要用到子接口技术 实验配置 在Cloud1上配置 在DMZ区域配置 在server1上配置在server2上配置在防火墙上进行的配置 由实验拓扑图可知防火墙与DMZ区域相连的接口为GigabitEthernet1/0/0接口 …

初识SpringBoot

SpringBoot以约定大于配置的核心思想,默认帮我们进行了很多设置,简单来说就是SpringBoot其实不是什么新的框架&#xff0c;它默认配置了很多框架的使用方式&#xff0c;就像maven整合了所有的jar包&#xff0c;spring boot整合了所有的框架 。 创建的包一定要在项目主程序入口…

【排序算法】C语言实现归并排序,包括递归和迭代两个版本

文章目录 &#x1f680;前言&#x1f680;归并排序介绍及其思想&#x1f680;递归实现&#x1f680;迭代实现 &#x1f680;前言 大家好啊&#xff01;阿辉接着更新排序算法&#xff0c;今天要讲的是归并排序&#xff0c;这里阿辉将讲到归并排序的递归实现和迭代实现&#xff…

CPU中的算术逻辑单元(ALU)

ALU有2个单元&#xff0c;1个算术单元和1个逻辑单元 算数单元 1 bit加法 半加器 由一个异或门&#xff08;XOR&#xff09;和与门&#xff08;AND&#xff09;两个逻辑门构成&#xff0c;异或门表示无进位加法&#xff08;sum&#xff09;&#xff0c;而与门表示进位&…

k-Wave仿真例程:创建超声换能器并绘制声场分布

k-Wave介绍 k-Wave软件是为了模拟超声波在1D、2D或3D中的传播。 应用示例包括&#xff1a; - 均匀和非均匀介质中的传播 - 模拟各种类型的传感器 - 模拟多普勒效应 - 衍射、折射和反射 - 光声、超声成像 - 波束合成、成像重建 - 模拟弹性波 安装k-Wave 安装k-Wave需要几个步…

基于springboot+vue的小徐影城管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

移动端测试如何学,超详细的APP测试攻略送上

前言 随着手机应用市场发展的逐渐成熟&#xff0c;手机APP已经渗透到人们的吃穿住行生活&#xff0c;比如手机支付APP、通讯APP、各大应用软件等&#xff0c;关于手机APP安全性能的重要性不言而喻。 鉴于此&#xff0c;做好手机APP测试对于软件开发方把控产品质量有着重要意义…

计算机408真的很难吗❓|深度分析+实操上岸规划

在下面这篇文章中&#xff0c;LUCEN详细分析了24考研的难度以及25考研人该怎么办 24考研计算机很难&#xff01;25考研你就这么干 如果你对于计算机考研择校有任何疑问&#xff0c;那么下面这篇文章一定能够帮助你&#xff1a; 计算机择校指南&#xff0c;内含300所院校 如…

Linux命令-top

1、top命令简介 top命令是linux系统常用命令之一&#xff0c;能够实时显示系统各个进程的资源占用情况&#xff0c;类似于windows系统的任务管理器。 需要注意的是&#xff1a;top命令监控的最小单位是进程&#xff0c;如果想监控更小单位时&#xff0c;就需要用到ps或者nets…

代码评审——随机数Random问题

问题描述&#xff1a; 为了获取唯一值&#xff0c;经常会依赖产生随机数来保证唯一性。在获取随机数时&#xff0c;如果使用错误的方法&#xff0c;会比较低效。 可以参考以下代码&#xff1a; public static String geneRundomNo(){Random rnew Random();int numr.nextInt(…

springboot114基于多维分类的知识管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的基于多维分类的知识管理系统 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章…

Server-Sent Events(SSE)简单实现实时通信

Server-Sent Events&#xff08;SSE&#xff09;是一种基于HTTP的实时通信协议&#xff0c;它允许服务器向客户端推送信息。相比于传统的轮询方式&#xff0c;SSE 提供了更加轻量级和实时的通信机制。在本文中&#xff0c;我们将深入浅出地介绍如何简单实现 Server-Sent Events…

在上海做程序员这么多年,退休后我的工资是多少?

大家好&#xff0c;我是拭心。 最近看到一个很可惜的事&#xff1a;有个阿姨在深圳缴纳了 12 年社保&#xff0c;第 13 年家里突然有事不得不回老家&#xff0c;回去后没再缴纳社保&#xff0c;结果退休后无法领退休工资&#xff0c;还得出来打工赚钱。 之所以这样&#xff0…

STL常用容器—stack与queue容器(栈与队列)

STL常用容器—stack与queue容器&#xff08;栈与队列&#xff09; stack容器1. stack容器模型图2. stack 基本概念3. stack 常用接口 queue 容器1. queue 容器模型图2. queue 基本概念3. queue 常用接口 参考博文1&#xff1a;&#xff1c;C&#xff1e; stack与queue容器概念模…

这种环境下腾讯64亿在北京拿地?

近期&#xff0c;金融市场出现较大波动&#xff0c;A股指数跌至2700点&#xff0c;同时恒生指数也下滑至15000点&#xff0c;引发了社会各界的关注和思考。与此同时&#xff0c;腾讯以64.2亿元拿下北京海淀区地块&#xff0c;马云和蔡崇信又增持阿里股票&#xff0c;这一系列的…

【Java网络编程01】网络原理初识

【Java网络编程01】网络原理初识 1. 网络通信基础概念 网络通信&#xff1a;网络互连的目的就是网络通信&#xff0c;即网络数据传输&#xff0c;再直白点而言就是不同主机的不同进程之间基于网络进行数据的传输交互。 那么&#xff0c;在组建的网络上有各种各样的主机&#…

【Conda】超详细的linux-conda环境安装教程

背景 最近被python各个版本环境整的头晕目眩&#xff0c;本来就不是专长做python的&#xff0c;切换各种版本着实不好操作&#xff0c;因此想到了conda这个好工具&#xff0c;以下是对conda的相关理解和搭建的详细过程&#xff0c;做个记录。 Conda简介 Conda是在Windows、m…