C++17字符流以及C++11文件流以及IO流

news2024/9/28 13:51:31

在这里插入图片描述

getline()

有时候我们希望在最终的字符串中保留输入时的空白符,这时候应该用getline函数来替代原来的>>运算符。( cin 不能输入包含嵌入空格的字符串)。

getline()函数的参数是一个输入流和一个string对象,原型是:getline(cin,string对象),函数从给定的输入流中读入内容,直到遇到换行符为止,但是此时的换行符要被读入,然后把所读入的内容存到string对象中,但此时不存入最后那个换行符。

getline函数的参数是一个输入流和一个string对象函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。

注意:getline只要一遇到换行符就结束读取操作并返回结果,哪怕输入的一开始就是换行符也是如此。如果输入真的一开始就是换行符,那么所得结果也是一个空string。

<string>中的getline函数有四种重载形式:

istream& getline (istream& is, string& str, char delim);

istream& getline (istream&& is, string& str, char delim);

istream& getline (istream& is, string& str);

istream& getline (istream&& is, string& str);

读取的istream是作为参数is传进函数的,读取的字符串保存在string类型的str中。

函数的变量:

  • is :表示一个输入流,例如 cin。
  • str :string类型的引用,用来存储输入流中的流信息。
  • delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。

getline只要遇到换行符就停止读入并且返回string对象,哪怕一开始输入就是换行符也是如此,只不过会返回一个空的string对象。和输入运算符一样,getline也会返回它的流参数,所以可以用getline的结果作为条件。

C++文件操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1FMApvnZ-1681396619864)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\image-20230413215045293.png)]

程序运行时,产生的数据都属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化,C++对文件操作需要包含头文件 < f s t r e a m > 。文本类型分为两种:

(1)文本文件:文件以文本的ASCII码的形式存储在计算机中。
(2)二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂他们。

操作文件三大类:

  • ofstream:写
  • ifstream:读
  • fstream:读写

文本文件

写文件

步骤如下:

  • 包含头文件:#include< fstream>
  • 创建流对象:ofstream ofs;
  • 打开文件:ofs.open(“文件路径”,打开方式);
  • 写数据:ofs<<“写入的数据”;
  • 关闭文件:ofs.close();

打开方式:

在这里插入图片描述

注:文件打开方式可以配合使用,利用|操作符。

void Csv::WriteCsvFile() {
	//std::ofstream out_file("data.csv", std::ios::out); //std::ios::out 文件不存在则创建文件,有文件则清空文件
	std::ofstream out_file;
	out_file.open("data.csv", std::ios::out);
	if (!out_file) {
		std::cout << "open file failed" << std::endl;
		return;
	}
	for(int i = 0; i < 5; ++i) {
		out_file << 12 << ",";
		out_file << 13 << ",";
		out_file << 14 << std::endl;
	}
	out_file.close();
	std::cout << "write file successed" << std::endl;
}

在这里插入图片描述

读文件

步骤如下:

  • 包含头文件:#include< fstream>
  • 创建流对象:ifstream ifs;
  • 打开文件,并判断文件是否打开成功:ifs.open(“文件路径”,打开方式);
  • 读数据:四种读取方式
  • 关闭文件:ifs.close();

在这里插入图片描述

在这里插入图片描述

void Csv::ReadCsvFile() {
	//std::ifstream in_file("data.csv", std::ios::in);
	std::ifstream in_file;
	in_file.open("data.csv", std::ios::in);
	if (!in_file) {
		std::cout << "open fill failed" << std::endl;
	}
	int num = 0;
	std::string line;
	std::string file;
	while (std::getline(in_file, line)) {
		std::string file;
		// 将整行字符串line读入到字符串流iss中
		std::istringstream iss(line);
        //将字符串流sin中的字符读入到field字符串中,以逗号为分隔符 
		std::getline(iss, file, ',');
		//将刚刚读取的字符串转换成int
		std::cout << std::atoi(file.c_str()) << " ";
		std::getline(iss, file, ',');
		std::cout << std::atoi(file.c_str()) << " "; 
		std::getline(iss, file, ',');
		std::cout << std::atoi(file.c_str()) << std::endl;
		num++;
	}
	std::cout << "读取了" << num << "行" << std::endl;
	if (5 == num) {
		std::cout << "read file success" << std::endl;
	}
	in_file.close();
}

****

二进制文件

以二进制的方式对文件进行读写,打开方式要指定为ios::binarry。

写文件

二进制方式写文件主要利用流对象调用成员函数write。函数原型:ostream& write(const char buffer,int len)。参数解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数。*

读文件

**二进制方式读文件主要利用流对象调用成员函数read。函数原型:istream & read(char *buffer, int len);参数解释:字符指针buffer指向内存中一段存储空间,len是读书的字节数。 **

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

threejs的使用

threejs介绍&#xff1a; Three.js是一款基于WebGL的JavaScript 3D库&#xff0c;用于创建和渲染3D图形场景。它提供了一个简单易用的接口&#xff0c;让开发者可以通过JavaScript代码创建出高度交互性和可视化的3D场景。Three.js提供了很多可用的3D对象和材质&#xff0c;例如…

C++ -2- 类和对象(上)| 什么是类

​ 文章目录 1.面向过程与面向对象2.类的引入3.类的定义两种定义方式 4.类的访问限定符5.类的作用域6.类的示例化7.类的对象大小计算8.类成员函数的this指针C语言和C的对比(this指针)空指针的问题 C语言和C实现Stack对比 1.面向过程与面向对象 C&#xff1a;面向过程&#xf…

java获取请求ip的方法

在上篇文章中我们介绍了 java获取请求 ip的方法&#xff0c;那么这篇文章我们就来详细讲解下获取请求 ip的方法。获取请求 ip的方法是基于 HTTP协议的&#xff0c;其原理如下&#xff1a; 1、用 web应用程序&#xff0c;将 web服务器端与客户端通过 HTTP协议通信。 2、客户端发…

LNMP架构和论坛搭建以及一键部署

数据流向 一、Nginx服务安装 1、关闭防火墙 [rootking ~]# systemctl stop firewalld [rootking ~]# systemctl disable firewalld [rootking ~]# setenforce 0 2、将所需软件包拖入/opt目录下 3、安装依赖包 yum -y install pcre-devel zlib-devel gcc gcc-c make 4、创建运…

Feign快速入门

文章目录 一、Feign1.1 Feign介绍1.2 Feign的使用步骤1.3 Feign的自定义配置1.3.1 配置方法 1.4 Feign的优化 一、Feign 1.1 Feign介绍 Feign是一个Java HTTP客户端&#xff0c;它使开发人员可以轻松地与RESTful API进行交互。Feign使用注释来描述REST API&#xff0c;它还支持…

Springboot整合Junit5

1 SpringBoot整合Junit &#xff08;一&#xff09;junit5 介绍 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架&#xff0c;JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。 JUnit 5 JUnit Platfo…

音视频开发十九:SDL线程和事件

SDL事件相关API DL_Event 是SDL库中使用的一个数据结构&#xff0c;用于表示系统中发生的事件。一个事件可以是键盘按键、鼠标移动、游戏手柄移动、窗口事件等。SDL_Event 结构包含有关事件类型、事件发生时间和事件参数的详细信息。 SDL_Event 结构具有以下成员&#xff1a;…

[5 种有效方法] 适用于 Android 的通用解锁图案/密码

在当今世界&#xff0c;保护您的密码对于您的文件和数据的安全至关重要&#xff0c;尤其是在第三方应用程序盛行的情况下。为这些应用程序注册帐户不是问题&#xff0c;就像记住它们一样。但是&#xff0c;如果您不知何故忘记了手机密码&#xff0c;您仍然可以在不丢失宝贵数据…

突破规模化运维瓶颈 SREWorks云原生数智运维平台揭秘

作者&#xff1a; 钟炯恩——阿里云大数据基础工程技术团队运维专家 引言 突破规模化运维瓶颈是诸多IT规模增长的企业及组织当前遇到的比较棘手的问题。面对这些问题&#xff0c;多数人的第一反应是上云。但是上云之后我们会发现&#xff0c;即使云上的架构规模增大&#xf…

如何使用DNS实现融合CDN功能

将托管DNS解决方案与CDN配对可为您的网站提供额外的性能、可靠性和灵活性。 域名系统&#xff08;DNS&#xff09;是一种用于计算机、服务或连接到Internet或专用网络的任何资源的分层分布式命名系统&#xff0c;它将各种信息与分配给每个参与实体的域名相关联&#xff0c;它基…

ChatGPT 火了,一大批开源平替也来了

ChatGPT 凭一己之力让全球为 AI 沸腾&#xff0c;引发了科技巨头之间的聊天机器人军备竞赛。 众所周知&#xff0c;ChatGPT 的背后技术是 GPT(Generative Pre-trained Transformer)模型。GPT 是一种基于 Transformer 模型的自然语言处理模型&#xff0c;由 OpenAI 公司开发。它…

【elasticsearch部署】

安装elasticsearch 1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;1&#xff09;查看数据卷目录2&#xff09;解压缩分词器安…

前端必备的nginx知识点

nginx学习&#xff0c;看这一篇就够了&#xff1a;下载、安装。使用&#xff1a;正向代理、反向代理、负载均衡。常用命令和配置文件,很全_java冯坚持的博客-CSDN博客 前端必备的nginx知识点 - 掘金 前言&#xff1a; 最近在做一个后台项目 ngixn简介 nginx是一款轻量级&…

【Sql】sql语句练习随记

本文通过最经典的“学生-成绩-课程-教师”表来帮助练习sql语句。 STUDENT表 SNO 学号SNAME 姓名SSEX 性别SBIRTHDAY 生日CLASS 班级 SCORE表 SNO 学号CNO 课程编号DEGREE 分数 COURSE表 CNO 课程编号CNAME 课程名称TNO 教师编号 TEACHER表 TNO 教师编号TNAME 教师姓名TS…

(包教包会)最强分布式锁工具:Redisson

今天来聊聊分布式锁的最强实现&#xff1a;Redisson 从分布式锁到Redisson实现非常详细&#xff0c;适合慢慢咀嚼~ 一. Redisson概述 1.1 什么是Redisson&#xff1f; Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。…

CRMEB开源商城/标准版后台默认admin路径修改、后台目录地址修改

默认admin路径修改 v4.7 版本开始兼容可以修改admin路径&#xff0c;可以根据自己的要求更换后台访问地址&#xff1b; 默认路径不能携带特殊字符、全部都为小写字母 修改后台admin默认路径 标准版本文件位置根目录/config/app.php 开源版本文件位置根目录/crmeb/config/app.p…

新增套餐/redis/QuartZ

套餐其实就是检查组的集合&#xff0c;例如有一个套餐为“入职体检套餐”&#xff0c;这个体检套餐可以包括多个检查组&#xff1a;一般检查、血常规、尿常规、肝功三项等。所以在添加套餐时需要选择这个套餐包括的检查组。 套餐对应的实体类为Setmeal&#xff0c;对应的数据表…

深度学习(7)之图像抠图 Image Matting算法调研

目录 1.Trimap和Strokes 2. 相关数据集 3.论文算法调研 3.1 Deep Image Matting 3.2 Semantic Image Matting 3.3 Background Matting 3.4 Background Matting V2 3.5 Semantic Human Matting 3.6 HAttMatting 3.7 MMNet&#xff1a;Towards Real-Time Automatic Portrait Matt…

Nginx虚拟主机、优化和防盗链

一、Nginx虚拟主机 1、基于域名的nginx虚拟主机的操作步骤 1.1 为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "192.168.2.66 www.xkq.com www.wy.com" >> /etc/hosts1.2 为虚拟主机准备网页文档 mkdir -p /var/www/html/ly/ mkdir -p /var/w…

经典文献阅读之--VGICP(体素化的ICP匹配)

0. 简介 之前我们在以前的文章中介绍了很多有关于点云匹配相关的知识&#xff0c;最近两年处理GICP这一大一统的ICP匹配方法以外&#xff0c;还有一个工作对体素化和ICP这两者打起了心思&#xff0c;《Voxelized GICP for Fast and Accurate 3D Point Cloud Registration》提出…