C ++将Ifstream转换为类对象的数组

时间:2013-04-13 07:36:44

标签: c++ arrays class ifstream

我在编程项目上遇到了一些麻烦。我想从.txt文档中获取信息,并将信息存储在类对象的数组中。对于.txt文档的每一行,我想要创建一个新的类对象。

所以,如果有

“10 Mark 9/24/1988客户经理

9 Jenny 8/6/1983航运助理“

在.txt中,第一行将存储在uArray [0]的第一个对象的变量中,第二行将存储在uArray [1]的变量中。

我创建了一个包含五个变量的“用户”类。

int iD;
string name, birth, sSN, dept, position;

这就是我所拥有的,我知道这是方式,但我无法做到正确..

{
ifstream myFile;
users uArray[100];

myFile.open("users.txt")
while(!myFile.eof())
   {
   myFile >> uArray.users.iD >> uArray.users.name >> uArray.users.sSN ...(ect);
   }
}

我应该创建一个可以对信息进行排序的函数还是更简单的方法?我被困了......抱歉初学者的问题......

3 个答案:

答案 0 :(得分:2)

您可以重载operator>>以使其更容易一些。这是运算符重载背后的实际目的。您提供自定义行为,使用流时它完全透明。在类中声明friend - 函数

friend std::ifstream& operator>>(std::ifstream&, users& user);

并实施它

std::ifstream& operator>>(std::ifstream& stream, users& user){
    stream >> user.iD >> user.name >> user.sSN ...(ect)
    return stream;
}    

然后您可以使用for循环并按上述方式执行操作。但是必须使用数组索引来处理数组中的单个元素

int i = 0;
while(!myFile.eof())
{
    myFile >> uArray[i].users.iD >> uArray[i].users.name >> 
    uArray[i].users.sSN ...(ect);
    i++;
}

有关教程,请参阅here

答案 1 :(得分:0)

您需要更类似于此的内容,您要将其编入索引:

ifstream myFile;
users uArray[100];

myFile.open("users.txt")
i=0;
while(!myFile.eof())
{
    myFile >> uArray[i].iD >> uArray[i].name >> uArray[i].sSN ...(ect);
    i++;
}

答案 2 :(得分:0)

您没有正确访问uArray的元素。由于它是一个数组(在您的示例中大小为100),您需要指定要将数据加载到哪个数组元素,如

uArray[i].users.iD

问题的一个解决方案是为文件中的每个记录增加一个变量:

int index = 0;
while ( !myFile.eof() && index < 100 ) {
    myFile >> uArray[index].users.iD >> ...;
    index++;
}

顺便说一句,如果你给“100”值一个名字(#defineconst int),你会得到额外的积分,并使用该值来比较{{1}反对。