#include<iostream>
#include<string>
#include<vector>
#include<sstream>
struct PersonInfo
{
string name;
vector<string> phones;
void print() const 这里的const也很关键,开始写的时候忘加了,主循环里的for循环就会报错
{
cout << name << ' ';
for (const auto& i : phones)
{
cout << i << ' ';
}
cout << endl;
}
};
int main()
{
string line, word;
vector<PersonInfo> people;
istringstream in_string;
while (getline(cin, line))
{
PersonInfo p;
in_string.clear(); 这一句很重要,因为在上一次循环结束时,in_string的eof位被置1了
in_string.str(line);
in_string >> p.name;
while (in_string >> word)
{
p.phones.push_back(word);
}
people.push_back(p);
}
for (const auto& i : people)
{
i.print();
}
return 0;
}
这道题出的不错,可以融汇到前面学的很多知识。 其中最妙的就是in_string.clear() 这条语句。 因为每次in_string 接受完string 数据以后,p.name 和 word 都会相继来从in_string 中把数据读出去,当读到末尾的时候,类似于读文件读到文件结束符eof 被置1一样,in_string 的eof 也会被置1,所以此时不调用clear() 进行清空标志位的话,下一次向in_string 流输入数据时就输不进去。
|