C++:如何将文件中的内容读入含有向量的类中
include<iostream>#include<vector#include<fstream>usingnamespacestd;classa{public:frie...
include<iostream>
#include<vector
#include<fstream>
using namespace std;
class a
{
public:
friend istream& operator>>(istream& in,a& obj) ;
friend ostream& operator<<(ostream& out,a& obj);
vector<int>& returnvector()
{ vector<int>& it=b;
return it;
}
private:
vector<int> b;
string str;
};
istream& operator>>(istream& in,a& obj)
{ in>>obj.str;
int tem=0;
while(in>>tem)
obj.returnvector().push_back(tem);
return in;
}
ostream& operator<<(ostream& out,a& obj)
{
cout<<"string:"<<endl;
cout<<obj.str<<endl;
cout<<"vector:"<<endl;
for(vector<int>::iterator iter=obj.returnvector().begin(); iter!=obj.returnvector().end();iter++)
cout<<*iter<<endl;
return out;
}
int main()
{
ifstream i("D:\\show.txt");
vector<a> mama;
a obj;
while( i>>obj)
{ mama.push_back(obj); }
for(vector<a>::iterator iter=mama.begin(); iter!=mama.end();iter++)
cout<<*iter<<endl;
}
文件里面有asd 1 2 3 4
ccvv 2 3 4 5
qq 6 7
我这个程序只能读第一行,因为读完所有整数后,in已经无效了,只执行了一次while循环就退出了,那能不能,有没有别的方法将文件中的内容读入到一个含有向量的类中(类中还有其它成员),希望大家能帮我想想办法,感激涕零哇! 展开
#include<vector
#include<fstream>
using namespace std;
class a
{
public:
friend istream& operator>>(istream& in,a& obj) ;
friend ostream& operator<<(ostream& out,a& obj);
vector<int>& returnvector()
{ vector<int>& it=b;
return it;
}
private:
vector<int> b;
string str;
};
istream& operator>>(istream& in,a& obj)
{ in>>obj.str;
int tem=0;
while(in>>tem)
obj.returnvector().push_back(tem);
return in;
}
ostream& operator<<(ostream& out,a& obj)
{
cout<<"string:"<<endl;
cout<<obj.str<<endl;
cout<<"vector:"<<endl;
for(vector<int>::iterator iter=obj.returnvector().begin(); iter!=obj.returnvector().end();iter++)
cout<<*iter<<endl;
return out;
}
int main()
{
ifstream i("D:\\show.txt");
vector<a> mama;
a obj;
while( i>>obj)
{ mama.push_back(obj); }
for(vector<a>::iterator iter=mama.begin(); iter!=mama.end();iter++)
cout<<*iter<<endl;
}
文件里面有asd 1 2 3 4
ccvv 2 3 4 5
qq 6 7
我这个程序只能读第一行,因为读完所有整数后,in已经无效了,只执行了一次while循环就退出了,那能不能,有没有别的方法将文件中的内容读入到一个含有向量的类中(类中还有其它成员),希望大家能帮我想想办法,感激涕零哇! 展开
2个回答
展开全部
你这个是因为你程序写的不对。
你在operator>>函数里读取数字的时候,用了while读,这样他读到下一行的ccvv的时候,不是int类型的,所以导致in流的失效,所以你看到的效果就是读取了一行,其实是读下面的是没发读了,他可不会读到一行的结尾就自动停止。所以你要解决的就是如何然程序读到一行自动停止,一种办法就是你知道每一行有多少个数字,然后你就读多少次,这个可以再加一个参数,在每个str的后面加上数字的个数。要不然你就一次读一行,用getline来读,这样读取的一行是一个整个字符串,你需要自己去解析这个字符串,分解出str跟各个数字。两种方法你自己选一个吧。
你在operator>>函数里读取数字的时候,用了while读,这样他读到下一行的ccvv的时候,不是int类型的,所以导致in流的失效,所以你看到的效果就是读取了一行,其实是读下面的是没发读了,他可不会读到一行的结尾就自动停止。所以你要解决的就是如何然程序读到一行自动停止,一种办法就是你知道每一行有多少个数字,然后你就读多少次,这个可以再加一个参数,在每个str的后面加上数字的个数。要不然你就一次读一行,用getline来读,这样读取的一行是一个整个字符串,你需要自己去解析这个字符串,分解出str跟各个数字。两种方法你自己选一个吧。
推荐于2016-09-19 · 知道合伙人互联网行家
关注
展开全部
ifstream in1("电话簿.txt");
if(!in)
{
cout<<"无法打开文件."<<endl;
return 1;
}
while(in)
{
char a=in.getline(str,99);//把文件中的字符串读到名为str的数组中,99为该数组的规格
if(in)
cout<<a;
}
in1.close;
return 0;
if(!in)
{
cout<<"无法打开文件."<<endl;
return 1;
}
while(in)
{
char a=in.getline(str,99);//把文件中的字符串读到名为str的数组中,99为该数组的规格
if(in)
cout<<a;
}
in1.close;
return 0;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询