第八章 8.3.1节练习

来源:互联网 发布:淘宝怎么截图给卖家 编辑:程序博客网 时间:2024/05/29 03:09

题目:

练习8.9:

使用你为8.1.2节第一个练习所写的函数打印一个istringstream对象的内容。

个人解答:

参考书上给出的范例,这个程序应该很容易写出来

istream& func(istream& in) {vector<string> in_buf;string tmp, word;while (getline(in, tmp)){istringstream words(tmp);while (words >> word)in_buf.push_back(word);}for (auto i : in_buf){cout << i << " ";}cout << endl;in.clear();return in;}


练习8.10:

编写程序,将来自一个文件中的行保存在一个vector<string>中。然后使用一个istringstream从vector读取数据元素,每次读取一个单词。

个人回答:

参考8.9的程序。不过,这个题目要求的是读取一个单词。8.9的程序的鲁棒性还不够,对于标点符号还没有进行处理。


练习8.11:

本节的程序在外层while循环中定义了istringstream对象。如果record对象第一在循环外,你需要对程序进行怎样的修改?重写程序,将record的定义一到while循环之外,验证你的设想的修改方法是否正确。

个人解答:

istream& func(istream& in) {vector<string> in_buf;string tmp, word;istringstream words;while (getline(in, tmp)){words.str(tmp);while (words >> word)in_buf.push_back(word);words.clear();}for (auto i : in_buf){cout << i << " ";}cout << endl;in.clear();return in;}

使用了上面的代码进行修改。这里将istringstream定义在了while循环的外部。使用str()成员函数读取字符串,在压入完成后将该流的状态复位,这样就可以持续进行输出了。不加clear()函数,程序会在打印文件第一行后停止。


练习8.12:

我们为什么没有在PersonInfo中使用类内初始化?

个人解答:

因为,在PersonInfo中没有const和引用类型的成员变量。这是从c++类角度来说的。

从对象的角度,因为无法对一个具体成员进行预测,这里对一个人的个人信息进行初始化是没有任何意义的。


0 0
原创粉丝点击