C++中读取长度规则的文本以换行结束很简单,使用for循环就行,比如读取文本test1.txt(姓名+电话)
morgan 2015552368 986523541 25368492
drew 9752354213 12365452684 2568942125
lee 6095242035 145103520 455200698546
定义类:
class persion{
public:
string name;
vector<string> phonenum;
void print();
};
void persion::print()
{
auto size=phonenum.size();
unsigned cnt=0;
cout<<name<<"有"<<size<<"个号码,分别是: ";
for(auto s:phonenum)
{
cnt++;
cout<<s;
if(cnt<size)
cout<<",";
}
}
读取文本:
vector<string> vecs;
vector<persion> per;
persion info;
bool ret=readfile("../data/test1.txt");
if(ret)
{
for(auto s1:per)
{
s1.print();
cout<<endl;
}
return 0;
}
return 1;
文本读取函数:
bool readfile(const string& s)
{
ifstream fin(s);
string v1,v2;
if(!fin)
return false;
while(!fin.eof())
{
fin>>v1;
info.name=v1;
info.phonenum.clear();
for(int i=0;i<3;i++)
{
fin>>v2;
info.phonenum.push_back(v2);
}
per.push_back(info);
}
fin.close();
return true;
}
如果号码个数未知,如:
morgan 2015552368 986523541
drew 9752354213
lee 6095242035 145103520 455200698546
则改为:
bool readfile(const string& s)
{
ifstream fin(s);
string v1,v2;
char ch;
if(!fin)
return false;
while(!fin.eof())
{
fin>>v1;
info.name=v1;
info.phonenum.clear();
while(fin>>v2)
{
info.phonenum.push_back(v2);
fin.get(ch);
if(ch=='\n')
break;
}
per.push_back(info);
}
fin.close();
return true;
}
或者使用string流:
bool readfile(const string& s)
{
ifstream fin(s);
string line,v2;
if(!fin)
return false;
while(getline(fin,line))
{
istringstream record(line);
record>>info.name;
info.phonenum.clear();
while(record>>v2)
info.phonenum.push_back(v2);
per.push_back(info);
}
fin.close();
return true;
}
结果:
morgan有2个号码,分别是: 2015552368,986523541
drew有1个号码,分别是: 9752354213
lee有3个号码,分别是: 6095242035,145103520,455200698546