使用空格分隔符从文本文件将对象读入数组



美好的一天,

我正在尝试将数据从文件读取到对象数组中。我似乎找不到如何处理空格分隔符。请帮助我。

该类称为Rational,它有两个属性:numdenom

文件数据: 1/2 -1/3 3/10 4/5 6/18

到目前为止,我已经这样做了:

int operator>>(ifstream& fin, rational r[]) {
fin.open("filedata.txt", ios::in);
if (fin)
{    
for (int i = 0; i < 5; i++)
{
fin >> r[i];
}
}
else
{
cout << "nData file cannot be found!" << endl;
}
}
ifstream& operator>>(ifstream& in, rational& r)
{
int num, denom;
char slash;
in >> num >> slash >> denom;
r.set(num,denom);
return in;
}

提前谢谢。

函数operator>>(ifstream& in, rational& r)应该按发布的方式工作,尽管我会将其更改为

std::istream& operator>>(std::istream& in, rational& r) { ... }

但是,第一个功能是不正确的。您不会从函数返回任何内容,即使其返回类型为int。您可以将其更改为:

int operator>>(ifstream& fin, rational r[])
{
int count = 0;
fin.open("filedata.txt", ios::in);
if (fin)
{    
for ( ; count < 5; ++count)
{
// If unable to read, break out of the loop.
if ( !(fin >> r[count] )
{
break;
}
}
}
else
{
cout << "nData file cannot be found!" << endl;
}
return count;
}

话虽如此,我认为您可以稍微改进该功能。

  1. 在调用函数中打开文件,main可能,并将std::ifstream对象传递给它。

  2. 与其给它传递一个数组,不如给它传递一个std::vector。这样,您就不必担心文件中的条目数。您阅读文件中可以找到的任何内容。

  3. 将返回类型更改为std::istream&,以便在必要时可以链接调用。

std::istream& operator>>(std::istream& in, std::vector<rational>& v)
{
rational r;
while ( in >> r )
{
v.push_back(r);
}
return in;
}

main(或更高级别的功能(中,使用:

std::vector<rational> v;
std::ifstream fin("filedata.txt);
if ( !fin )
{
// Deal with error.
}
else
{
fin >> v;
}
// Use v as you see fit.

相关内容

  • 没有找到相关文章

最新更新