《C++ Primer》(5th)习题解答——8.4、8.5(使用ifstream对象读取文件)

题目描述(8.4)

在这里插入图片描述

代码

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

using std::ifstream;
using std::string;
using std::vector;
using std::cerr;
using std::endl;
using std::cout;

void func(const string &ifile, vector<string> &s);

int main()
{
	string ifile("C:\\Users\\dxm\\Desktop\\Vs_code\\ExerciseCode\\data.txt");
	vector<string> s;
	func(ifile, s);
	for (auto c : s)
		cout << c << endl;
	return 0;
}

void func(const string &ifile, vector<string> &s)
{
	ifstream in(ifile);
	string line;
	if (in)
	{
		while (getline(in, line))
			s.push_back(line);
	}
	else
	{
		cerr << "无法打开文件,请确认文件路径是否正确:" << endl;
	}
}

测试用例

文件内容:

在这里插入图片描述

输出:

在这里插入图片描述

题目描述(8.5)

在这里插入图片描述

代码

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

using std::ifstream;
using std::string;
using std::vector;
using std::cerr;
using std::endl;
using std::cout;

void func(const string &ifile, vector<string> &s);

int main()
{
	string ifile("C:\\Users\\丁学明\\Desktop\\Vs_code\\ExerciseCode\\data.txt");
	vector<string> s;
	func(ifile, s);
	for (auto c : s)
		cout << c << endl;
	return 0;
}

void func(const string &ifile, vector<string> &s)
{
	ifstream in(ifile);
	string line;
	if (in)
	{
		while (in >> line) //将上题的代码在此处改变即可
			s.push_back(line);
	}
	else
	{
		cerr << "无法打开文件,请确认文件路径是否正确:" << endl;
	}
}

测试用例

文件内容:

在这里插入图片描述

输出:

在这里插入图片描述

总结

  1. 读取文件内容时,使用ifstream类型
  2. 将创建的ifstream对象与文件路径关联时,文件路径可以是string对象,其格式为:
string ifile("C:\\Users\\丁学明\\Desktop\\Vs_code\\ExerciseCode\\data.txt");
  1. 将ifstream对象与文件关联后,文件中的内容全部存储在该对象中,读取对象中的存储的内容时,可以按行读取,也可以按由whitespace隔开的方式读取
//in对象的类型为ifstream,按行读取
while(getline(in, line))
	{...};
//in对象的类型为ifstream,按whitespace隔开的方式读取
while(in >> line)
	{...};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值