C++Prime 第八章

C++Prime第八章

练习8.1   练习8.2

#include <iostream>
#include <sstream>
#include <fstream>
using namespace std;

istream& print(istream& is)
{
	string word;
	while (is>>word)
	{
		cout << word<<endl;
	}
	is.clear();
	return is;
}
int main()
{
	print(cin);
	return 0;
}

练习8.3

读取到文件尾,或者failbit或者badbit被置位的时候

练习8.4

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
	ifstream in;
	in.open("test.txt");
	if (!in)
		cerr << "There is some error happens!\n";
	vector<string> data;
	string tmp;
	while (getline(in, tmp))
	{
		data.push_back(tmp);
		cout << tmp << endl;
	}
	in.close();
	return 0;
}

练习8.5

getline(in,tmp)换成in>>tmp即可.

练习8.6

书上有

练习8.7 练习8.8

略.注意追加:设置open第二个参数,即打开模式为app即可.

练习8.9

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

istringstream& print(istringstream& input)
{
	string word;
	while ( getline(input,word))
	{
		cout << word << endl;
	}
	return input;
}

int main()
{
	string tmp = "hello world\n";
	istringstream input(tmp);
	print(input);
	return 0;
}

练习8.10

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
const std::string FILE_PATH = "test.txt";
using namespace std;

int main()
{
	ifstream fin(FILE_PATH,ifstream::in);
	vector<string> data;
	if (fin)
	{
		string line;
		while (getline(fin,line))  //读取文件所有行,依次存入data里
			data.push_back(line);
	}
	fin.close();
	for (auto p = data.begin(); p != data.end(); ++p)
	{
		string word;
		istringstream sin(*p);//将string流绑定到整行
		while (sin >> word)
			cout << word<<"   ";
		cout << endl;
		//新一轮迭代开始时,先前的sin会自动销毁,从而每次都是读取的新流
	}
	return 0;
}

练习8.11

每次都要对流进行有效状态的恢复(strm.clear()),然后重新绑定数据(strm.str(line)).

struct PersonInfo
{
	string name;
	vector<string> phones;
};

int main()
{
	string line, word;
	vector<PersonInfo> people;
	istringstream record(line);
	while (getline(cin, line)) {
		PersonInfo info;
        record.clear();
		record.str(line);
		record >> info.name;
		while (record >> word)
			info.phones.push_back(word);
		people.push_back(info);
	}
	return 0;
}

练习8.12

因为肯定要读取数据.

练习8.13

cin改成一个ifstream类型的对象,绑定到文件即可

练习8.14

无需copy大量数据.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值