练习8.9:使用你为8.1.2节(第281页)第一个练习所编写的函数打印一个istringstream对象的内容。
#include#include #include #include using namespace std; istream &f(istream & in) { string v; while (in >> v, !in.eof()) { if (in.bad()) throw runtime_error("IO流错误"); if (in.fail()){ cerr << "data error" << endl; in.clear(); in.ignore(100, 'n'); continue; } cout << v << endl; } in.clear(); return in; } int main() { ostringstream msg; msg << "ddaw的发发发 大热点 艾尔" << endl; istringstream in(msg.str()); f(in); return 0; }
练习8.10:编写程序,将来自一个文件中的行保存在一个vector
#include#include #include #include #include using namespace std; int main() { ifstream in("data"); if (!in) { cerr << "无法打开文件" << endl; return -1; } string line; vector words; while (getline(in, line)) { words.push_back(line); } in.close(); auto it=words.begin(); while (it != words.end()) { istringstream line_str(*it); string word; while (line_str >> word) cout << word << " "; cout << endl; ++it; } return 0; }
练习8.11:本节的程序在外层while循环中定义了istringstream对象。如果record对象定义在循环之外,你需要对程序进行怎样的修改?重写程序,将record的定义移到while循环之外,验证你设想的修改方法是否正确。
#include#include #include #include #include using namespace std; struct PersonInfo { string name; vector phones; }; int main() { string line, word;//分别保存来自输入的一行和单词 vector people; istringstream record; while (getline(cin, line)) { PersonInfo Pif; record.clear();//循环使用字符串流时,每次调用都要clear record.str(line); record >> Pif.name; while (record >> word) Pif.phones.push_back(word); people.push_back(Pif); } return 0; }



