gpt4 book ai didi

c++ - 从带有空格分隔符的文本文件中将对象读入数组

转载 作者:行者123 更新时间:2023-12-01 14:49:27 25 4
gpt4 key购买 nike

再会,

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

该类称为 Rational,它有两个属性:num 和 denom。

文件数据: 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;
}

话虽如此,我认为您可以稍微改进该功能。
  • 在调用函数中打开文件,main也许,并通过 std::ifstream反对它。
  • 与其传递数组,不如传递 std::vector .然后,您不必担心文件中的条目数。您可以阅读文件中可以找到的任何内容。
  • 将返回类型更改为 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.

    关于c++ - 从带有空格分隔符的文本文件中将对象读入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099359/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com