C++Primer第五版 8.3.1节练习
2015-09-17 07:24
417 查看
练习8.9:使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。
答:见练习8.9.cpp
练习8.10:编写程序,将来自一个文件中的行保存在一个
答:见练习8.10.cpp
练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎样的修改?重写程序,将record的定义移到while循环之外,验证你的修改方法是否正确。
答:while需要对record的状态进行判断,见练习8.11.cpp
练习8.12:我们为什么没有在PersonInfo中使用类内初始化?
答:PersonInfo是一个聚合类,所有的数据成员默认属性是公共的,第二的,PersonInfo类中的数据成员需要实时输入的。回答不准,回头再看看。
练习8.9
练习8.10
练习8.11
答:见练习8.9.cpp
练习8.10:编写程序,将来自一个文件中的行保存在一个
vector<string>中,然后使用一个istringstream从vector读取数据元素。每次读取一个单词。
答:见练习8.10.cpp
练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎样的修改?重写程序,将record的定义移到while循环之外,验证你的修改方法是否正确。
答:while需要对record的状态进行判断,见练习8.11.cpp
练习8.12:我们为什么没有在PersonInfo中使用类内初始化?
答:PersonInfo是一个聚合类,所有的数据成员默认属性是公共的,第二的,PersonInfo类中的数据成员需要实时输入的。回答不准,回头再看看。
练习8.9
/* *练习8.9 *日期:2015/7/23 *问题描述:练习8.9:使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。 *功能;练习 *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <sstream> #include <string> #include <vector> using namespace std; istream& is_input(istream& in) { auto old_state = in.rdstate(); //记住流的当前状态 string s; while (in >> s) //遇到文件结束标志符时停止 cout << s << " "; //标准输出 in.setstate(old_state); //恢复流为原有状态 return in; } int main() { string line = "This is a test!"; istringstream sin(line); is_input(sin); return 0; }
练习8.10
/* *练习8.10 *日期:2015/7/23 *问题描述:练习8.10:编写程序,将来自一个文件中的行保存在一个vector<string>中,然后使用一个istringstream从vector读取数据元素。每次读取一个单词。 *说明: *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <fstream> #include <sstream> #include <vector> using namespace std; void test_stream(string filename) { string line,word; ifstream in(filename); vector<string> line_vec,word_vec; while(!in.eof()) //从文件里读取内容,第一层 { getline(in,line); line_vec.push_back(line); //存放一行一行的string } for(auto i = 0; i != line_vec.size(); ++i) { istringstream sin(line_vec[i]); //第二层,读取一行一行的string while (sin >> word) //一个单词一个单词读取 { word_vec.push_back(word); //存放一个一个的单词 } } for(auto i = 0; i != word_vec.size(); ++i) //打印单词 cout << word_vec[i] << endl; } int main() { test_stream("test.txt"); return 0; }
test.txt I am a coder!!!
练习8.11
/* *练习8.11 *日期:2015/7/23 *问题描述:练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎样的修改?重写程序,将record的定义移到while循环之外,验证你的修改方法是否正确。 *说明:改动如下,和注释部分对照 *作者:Nick Feng *邮箱:nickgreen23@163.com */ #include <iostream> #include <fstream> #include <sstream> #include <string> #include <vector> using namespace std; struct PersonInfo{ string name; vector<string> phones; }; int main() { string line, word; vector<PersonInfo> people; ofstream out("person_data_save.txt"); /* while(getline(cin,line)) { PersonInfo info; istringstream record(line); record >> info.name; out << info.name << " "; cout << info.name << endl; while(record >> word) { info.phones.push_back(word); out << word << " "; cout << word << endl; } people.push_back(info); }*/ getline(cin,line); istringstream record(line); while(!record.eof()) { PersonInfo info; record >> info.name; out << info.name << " "; cout << info.name << endl; while(record >> word) { info.phones.push_back(word); out << word << " "; cout << word << endl; } people.push_back(info); } }
相关文章推荐
- C++Primer第五版 8.2.2节练习
- C++Primer第五版 8.2.1节练习
- C++Primer第五版 8.1.2节练习
- C++Primer第五版 第7章 类(练习解答)
- C++Primer第五版 7.6节练习
- C++Primer第五版 7.5.6节练习
- C++Primer第五版 7.5.5节练习
- C++Primer第五版 7.5.4节练习
- Leetcode House Robber II
- 类型混用引发的血案(C语言)
- c-free配置c++11
- C/C++语言内存对齐
- C++11之lambda表达式
- C语言实现静态链表
- Windows下使用Dev-C++开发基于pthread.h的多线程程序
- C++拷贝构造函数详解
- C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出
- C++ Builder中Toolbar控件的一些用法和说明整理
- C++中内存对齐
- C++ 之初探异常处理(exception)