练习8.1
编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。
std::istream &iofunction(std::istream &is)
{
std::string s;
while(is >> s)
std::cout << s << std::endl;
is.clear();
return is;
}
练习8.2
测试函数,调用参数为cin。
#include <iostream>
#include <string>
std::istream &iofunction(std::istream &is)
{
std::string s;
while(is >> s)
std::cout << s << std::endl;
is.clear();
return is;
}
int main()
{
iofunction(std::cin);
std::string s1;
while(std::cin >> s1)
std::cout << s1 << std::endl;
return 0;
}
练习8.3
什么情况下,下面的while循环会终止?
while (cin >> i) /* ... */
badbit、failbit和eofbit任一个被置位,则检测流状态的条件会失败。
练习8.4
编写函数,以读模式打开一个文件,将其内容读入到一个string的vector中,将每一行作为一个独立的元素存于vector中。
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
ifstream ifs("data");
vector<string> v1;
string buf;
if(ifs)
{
while(getline(ifs,buf))
{
v1.push_back(buf);
}
}
for(const auto &s : v1)
cout << s << endl;
return 0;
}
练习8.5
重写上面的程序,将每个单词作为一个独立的元素进行存储。
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main()
{
ifstream ifs("data");
vector<string> v1;
string buf;
if(ifs)
{
while(ifs >> buf)
{
v1.push_back(buf);
}
}
for(const</