C++读写文本文件

news/2024/10/19 7:36:59/

2023年5月30日,周二下午:

这几天学习了C++对文本文件的读写,写篇博客来总结一下

由于内容太多,我没法一次性写完,之后会不定期更新的


我使用C++标准库中的fstream库来读写文本文件

用fstream来读写文本文件有两种方式:

1、使用插入运算符“<<”和提取运算符“>>”

2、使用fstream库里面的类的成员函数


使用插入运算符“<<”和提取运算符“>>”来读写文本文件

通过"<<"往文本文件中写入数据:

注意:C语言风格的字符串和C++的string类都可以通过"<<"往文本文件中写入数据。

我个人建议使用C++的string类,因为这样就不用考虑设置长度或者说大小的问题。如果你用C语言风格的字符串的话,还要设置字符数组的大小,有点麻烦。

#include <iostream>
#include <fstream>
using namespace std;int main(){char cBuf[1024];string sBuf;ofstream ofs("text.txt",ios::out);cin>>cBuf;cin>>sBuf;//C语言风格的字符串和C++的string类都可以//通过"<<"往文本文件中写入数据ofs<<cBuf;ofs<<sBuf;//往文本文件中写完数据后,要记得调用close来关闭ofs.close();return 0;
}

不过,这个程序或者说用“<<”往文本文件中写入数据有一个问题,那就是不能含空格,否则就会停止写入,即使空格后面还有内容

可以看到空格后面的内容没有写入

通过">>"从文本文件中读取数据:

注意:C语言风格的字符串和C++的string类都可以通过">>"从文本文件中读取数据。

我个人建议使用C++的string类,因为这样就不用考虑设置长度或者说大小的问题。如果你用C语言风格的字符串的话,还要设置字符数组的大小,有点麻烦。

假设文本文件text2.txt的内容如下:

中国专业IT社区CSDN(Chinese Software Developer Network)创立于1999年,致力于为中国软件开发者提供知识传播、在线学习、职业发展等全生命周期服务。

#include <iostream>
#include <fstream>
using namespace std;int main(){string sBuf;//char cBuf[1024];ifstream ifs("text2.txt",ios::in);//把文本文件中的数据提取到sBuf中ifs>>sBuf;//把文本文件中的数据提取到C语言风格的字符串中也是可以的//ifs>>cBuf;//输出sBuf的内容cout<<sBuf<<endl;//cout<<cBuf<<endl;ifs.close();return 0;
}

怎么句子没读取完呢???咋读到一半没到就停了???

这是因为Chinese前面有一个空格,也就是说用">>"从文本文件中读取数据时,遇到空格就会停止读取,哪怕后面还有内容没有读取。

那我想读取完怎么办?

目前是没有办法的,

ifs>>sBuf这个语句每次只会读取文本文件中的一个单词(即空格或换行符分隔的一组字符),

即使是你加上循环也不能解决这个问题:

#include <iostream>
#include <fstream>
using namespace std;int main(){string sBuf;//char cBuf[1024];ifstream ifs("text2.txt",ios::in);//把文本文件中的数据提取到sBuf中ifs>>sBuf;//把文本文件中的数据提取到C语言风格的字符串中也是可以的//ifs>>cBuf;while(!ifs.eof()){//输出sBuf的内容cout<<sBuf;//cout<<cBuf<<endl;ifs>>sBuf;}ifs.close();return 0;
}

总而言之,虽然用>>和<<很方便,但是局限性也不少。

但是>>和<<也非一无是处,通过<<和换行符"\n"可以很方便的按行写入数据,再搭配getline按行读取函数,可以很容易实现一个通讯录小项目及其数据的存储和读取,并且还可以很容易实现按名或者手机号等查找、浏览通讯录、按名或者手机号等删除等功能。之后有空的话,我会完成这个小项目,可能写在本篇博客的最后,也可能新开一篇博客。


使用fstream库里面的类的成员函数来读写文本文件

这部分内容还没写完,有空会更新的


http://www.ppmy.cn/news/107157.html

相关文章

Java--Stream流详解仅供学习

Java 8中新增的Stream可以让你非常方便地对集合进行过滤&#xff0c;映射&#xff0c;切片等各种操作。Stream流可连续调用多个操作&#xff0c;可以单独执行&#xff0c;也可以合并一起执行。 创建Stream Java 8中通过 Collection 接口增加了 stream() 和 parallelStream() 方…

VM——编写脚本,TCP发送16进制字符串

1、参考&#xff1a; &#xff08;1&#xff09;​​​(246条消息) TCP中发送接收16进制数&#xff08;16进制字符串与字节数组之间的转换&#xff09;_tcp发送16进制字符串_start_continue的博客-CSDN博客 &#xff08;2&#xff09;(246条消息) C#byte String转换_c# byte转…

泛型的介绍以及原理

目录 一、前言 二、什么泛型 三、为什么要使用泛型 3.1、保证了类型的安全性。 3.2、消除强制转换 3.3、提高程序的性能 3.4、 提高了代码的重用性 四、如何使用泛型 4.1、 泛型类 4.2、泛型接口 4.3、泛型方法 五、泛型通配符 5.1、无边界的通配符 5.2、固定上边…

「接口汇总」APISpace 常用的免费API 整理

空气质量查询&#xff1a;支持国内3400个城市的整点观测&#xff0c;并附带空气质量监测点&#xff08;全国共2335个&#xff09;的整点观测数据。天气预报查询&#xff1a;支持全国以及全球多个城市的天气查询&#xff0c;包含国内3400个城市以及国际4万个城市的实况数据&…

TensorFlow、PyTorch分布式训练

要在两台主机之间使用分布式训练&#xff0c;您可以使用一些深度学习框架提供的工具和库来实现。 这里以TensorFlow为例&#xff0c;介绍一下如何在两台主机之间使用分布式训练。 首先&#xff0c;您需要安装TensorFlow和CUDA等相关软件&#xff0c;并确保两台主机都可以访问…

Python - Pycharm 配置 autopep8 并设置快捷键

什么是 PEP8 官方&#xff1a;PEP 8 – Style Guide for Python Code | peps.python.org 中文翻译博客&#xff1a;https://www.cnblogs.com/ajianbeyourself/p/4377933.html PEP8 是 Python 官方推出的一套编码的规范&#xff0c;只要代码不符合它的规范&#xff0c;就会有…

vulnhub dc-8

1.信息搜集 端口 22,80,31337 存活ip 192.168.85.136 2.访问网站&#xff0c;进行信息搜集 在欢迎页面发现sql注入 sqlmap进行跑数据 python sqlmap.py -u "http://192.168.85.136/?nid1" --batch -D d7db -T users -C name,pass --dump尝试robots.txt,发现后他登…

android DatePicker 和 TimePicker 样式

这种 DatePicker 样式&#xff0c;对应的 xml 这里 year, month, day 都支持双向绑定 <DatePickerandroid:id"id/datePicker"android:layout_width"match_parent"android:layout_height"wrap_content"app:layout_constraintTop_toBottomOf&…