首页 > 代码库 > C++primer 8.3.2节练习

C++primer 8.3.2节练习

练习8.13

 1 #include <iostream>
 2 #include <fstream>
 3 #include <sstream>
 4 #include <vector>
 5 
 6 using namespace std;
 7 
 8 struct PersonInfo
 9 {
10     string name;
11     vector<string> phones;
12 };
13 
14 string format(string)
15 {
16     return "format";
17 }
18 
19 bool valid(string s)
20 {
21     if (s != "")
22         return true;
23     else
24         return false;
25 }
26 
27 int main()
28 {
29     ifstream in_file("people.txt");
30     if (!in_file)
31     {
32         cerr << "no file?!" << endl;
33         return 1;
34     }
35     string line, word;
36     vector<PersonInfo> people;
37     while (getline(in_file, line))
38     {
39         PersonInfo info;
40         istringstream record(line);
41         record >> info.name;
42         while (record >> word)
43             info.phones.push_back(word);
44         people.push_back(info);
45     }
46 
47     for (const auto &entry : people)
48     {
49         ostringstream formatted, badNums;
50         for (const auto &nums : entry.phones)
51         {
52             if (!valid(nums))
53             {
54                 badNums << " " << nums;
55             }
56             else
57                 formatted << " " << format(nums);
58         }
59         if (badNums.str().empty())
60             cout << entry.name << " " << formatted.str() << endl;
61         else
62             cerr << "input error: " << entry.name << " invalid number(s) " << badNums.str() << endl;
63     }
64     system("pause");
65     return 0;
66 }

练习8.14

一个是避免拷贝,造成效率不高,第二是防止值被修改

C++primer 8.3.2节练习