在桌面上有一个phones.txt
#include"stdafx.h"
#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
#include "Sales_data.h"
using namespace std;
struct PersonInfo {
string name;
vector<string> TeleNums;
};
int main(int argc, char **argv) {//argc是命令行参数的个数,argv是字符二级指针,可指向一个字符串参数
const string inputfilelocal= "C:\\Users\\dell\\Desktop\\phones.txt";
ifstream in(inputfilelocal);
vector<PersonInfo> vec;
string line,word;
istringstream record;
while (getline(in, line))
{
PersonInfo info;
record.str(line);
record >> info.name;
while (record >> word)
{
info.TeleNums.push_back(word);
}
vec.push_back(info);
record.clear();
}
for (auto a : vec)
{
cout << a.name << " ";
for (auto b : a.TeleNums)
{
cout << b << " ";
}
cout << endl;
}
return 0;
}
判定错误格式的号码(不是11位数字),并使用ostringstream缓存号码串继而输出
#include"stdafx.h"
#include<iostream>
#include<fstream>
#include<sstream>
#include<string>
#include<vector>
#include "Sales_data.h"
using namespace std;
bool illegalnum (const string& num)
{
if (num.size() == 11)return false;
return true;
}
struct PersonInfo {
string name;
vector<string> TeleNums;
};
int main(int argc, char **argv) {//argc是命令行参数的个数,argv是字符二级指针,可指向一个字符串参数
const string inputfilelocal= "C:\\Users\\dell\\Desktop\\phones.txt";
ifstream in(inputfilelocal);
vector<PersonInfo> people;
string line,word;
istringstream record;
while (getline(in, line))
{
PersonInfo info;
record.str(line);
record >> info.name;
while (record >> word)
{
info.TeleNums.push_back(word);
}
people.push_back(info);
record.clear();
}
for (const auto &entry : people)
{
ostringstream formatted, badnums;
for (const auto &nums : entry.TeleNums)
{
if (illegalnum(nums))//处理错误格式号码
{
//badnums<<" "<<nums;
badnums.str(badnums.str().append(" " + nums));
}
else
{
formatted << " " << nums;
}
}
if (!badnums.str().empty())
{//显示错误的号码
cerr << entry.name << " 有不符合规范的号码:" << badnums.str() << endl;
}
else
{
cout << entry.name << formatted.str() << endl;
}
}
return 0;
}