C++中txt文件的读、写操作介绍

我们在日常处理问题时经常要进行数据的读写操作,而这些数据最常用的存储格式就是txt文本了。下面我们就来简单介绍一下如何通过C++对文本中的数据进行处理。

首先我们来引入头文件,C++为我们提供了iostream库(输入输出流,可以理解为in(输入) out(输出) stream(流),取in、out的首字母与stream合成); fstream是stream的子类,为我们提供了操作文件的众多方式(大家可以通过另外一篇文章对此进行更细致的了解)。

/*author: wxc_1998
date: 2019/7/3*/
#include <iostream>  
#include <fstream>  

同时为了程序后续功能的需要,我们还加入了:

#include <vector> //后续使用容器vector需要
#include <math.h>//进行数学运算需要

接着我们主要使用fstream中的两个文件流子类:ifstream和ofstream。

ifstream可以用来打开数据文件,并进行读取操作,ofstream主要用于数据的写出操作。

ifstream

其基本用法为:

ifstream open_file("文件路径");

open_file是ifstream类定义的一个对象,后面可以输入我们想要打开文件的绝对路径或者相对路径(注意:在输入文件路径时应使用“\\”,如"E:\\1\\scores.txt")。

在打开了我们想要读取的数据文件之后,我们可以直接通过运算符“>>”来进行读取操作,这种方式可以跳过空格,逐个读取文件中的所有字符,直到文件尾。

		int temp;
		while(!open_file.eof())
		{
			open_file >> temp;
			my_score.push_back(temp);
		}

除此之外,我们还有一种读取方法是:通过getline函数逐行读取数据。这种方法在对字符串数据文件中比较常用,当然,我们读取了每一行中的数据之后通常还需要对行字符串进行一些其他的操作。

		string line;
		while(!open_file.eof())
		{
			getline(open_file,line);
			all_data.push_back(line);
		}

ofstream

其基本用法与ifstream类似:

ofstream out_file("写出文件路径");

out_file为ofstream类定义的对象名,括号内可以为想写出文件的任意路径。

创建写出文件之后,我们可以通过运算符"<<"来进行数据写出操作。
例如:

	out_file << "min: " << my_min << endl;
	out_file << "max: " << my_max << endl;
	out_file << "ave: " << my_ave << endl;
	out_file << "xigma: " << my_xig << endl;

这种使用方式类似于我们常用的cout显示,同时也可以对输出的格式进行调节以达到满意的效果。

最后我们以一个应用实例来结束本篇博客。
问题: 统计数据文件data.txt中的最大值、最小值并写出到result.txt中。

data.txt文件,第一个数代表数据的个数。

6
12 20 7 18 29 10

程序源代码:

/*author: wxc_1998
date: 2019/7/3*/

#include <fstream>  
#include <iostream>  
#include <vector>

using namespace std;

void main()
{
	vector<int> my_data;
	int my_size = 0;
	ifstream open_file("文件路径\\data.txt");
	/*-------------------------读取数据文件------------------------------*/
	if(open_file)
	{
		// cout << "成功打开文件!" <<  endl;
		open_file >> my_size;
		int temp;
		while(!open_file.eof())
		{
			open_file >> temp;
			my_data.push_back(temp);
		}
	}
	else
		cout << "打开文件时出现错误!" << endl;
	/*-------------------------求取最大最小值------------------------------*/
	int my_min = 1000, my_max = -1, my_sum = 0;
	double my_ave = 0.0;
	for (int i = 0; i != my_data.size(); ++i)
	{
		if(my_min > my_data[i])
			my_min = my_data[i];
		if(my_max < my_data[i])
			my_max = my_data[i];
		my_sum += my_data[i];
	}
	my_ave = (double)my_sum/(double)my_data.size();


	cout << "min: " << my_min << endl;
	cout << "max: " << my_max << endl;
	cout << "ave: " << my_ave << endl;
	
	ofstream out_file("文件路径\\result.txt");
	out_file << "min: " << my_min << endl;
	out_file << "max: " << my_max << endl;
	out_file << "ave: " << my_ave << endl;

	open_file.close();
	out_file.close();

	cout << endl << "press any key to continue!";
  	cin.clear();
  	cin.sync();
  	cin.get();
}
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓晨的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值