练习8.4:编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。
解答:
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using std::ifstream;using std::cout;using std::endl;using std::string;using std::vector;
void ReadFileToVec(const string& filename,vector<string>& vec)
{
ifstream ifs(filename);
if(ifs)
{
string buf;
while(std::getline(ifs,buf))
vec.push_back(buf);
}
}
int main()
{
vector<string> svec;
ReadFileToVec("81.cpp",svec); //81.cpp为当前目录下的一个文件
for(const auto &str:svec)
cout<<str<<endl;
return 0;
}
练习8.5:重写上面的程序,将每个单词作为一个独立的元素进行存储。
解答:
#include<iostream>
#include<string>
#include<vector>
#include<fstream>
using std::ifstream;using std::cout;using std::endl;using std::string;using std::vector;
void ReadFileToVec(const string &filename, vector<string>& vec)
{
ifstream ifs(filename);
if(ifs)
{
string buf;
while(ifs>>buf)
vec.push_back(buf);
}
}
int main()
{
vector<string> svec;
ReadFileToVec("81.cpp",svec);
for(const auto &word:svec)
cout<<word<<endl;
return 0;
}
练习8.6:重写7.1.1节的书店程序(第229页),从一个文件中读取交易记录。将文件名作为一个参数传递给main(参见6.2.5节,第196页)。
解答:
#include<iostream>
#include<fstream>
#include<../ch07/ex7_26.h>//Sales_data 所在目录
using std::cout;using std::endl;using std::ifstream;using std::cerr;
int main(int argc,char **argv)
{
ifstream input(argv[1]);
Sales_data total;
if(read(input,total))
{
Sales_data trans;
while(read(input,trans))
{
if(total.isbn() == trans.isbn())
total.combine(trans);
else
{
printf(cout,total)<<endl;
total = trans;
}
}
printf(cout,total)<<endl;
}
else
{
cerr<<"No data?!"<<endl;
}
return 0;
}