题目描述
代码
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <stdexcept> //标准异常处理类
using std::cin;
using std::cout;
using std::endl;
using std::cerr;
using std::string;
using std::vector;
using std::istream;
using std::ifstream;
using std::istringstream;
using std::ostringstream;
struct PersonInfo
{
string name;
vector<string> phones;
};
string format(const string &s);
bool valid(const string &s);
int main()
{
string line, word;
vector<PersonInfo> people;
ifstream read_file("C:\\Users\\dxm\\Desktop\\info");
while (getline(read_file, line))//按行读入文件
{
PersonInfo info;
istringstream record(line);
record >> info.name;//读取record中的第一个字符串,即人名
//读取record中的剩余字符串,即号码
while (record >> word)
{
info.phones.push_back(word);
}
people.push_back(info);
}
ostringstream os;
for (const auto &entry : people)
{
ostringstream formatted, badNum;
for (const auto &nums : entry.phones)
{
if (!valid(nums))
{
badNum << " " << nums;//将错误的号码格式化进badNum对象中
}
else
formatted << " " << format(nums);
}
if (badNum.str().empty())
os << entry.name << " " << formatted.str() << endl;
else
cerr << "input error:" << entry.name << " invalid number(s)" << badNum.str() << endl;
}
cout << os.str() << endl;
return 0;
}
//格式化电话号码的函数暂时这样写
string format(const string &s)
{
return s;
}
//验证电话号码是否合法的函数暂时这样写
bool valid(const string &s)
{
return true;
}