【问题标题】:Reading file into two arrays将文件读入两个数组
【发布时间】:2016-05-23 19:25:59
【问题描述】:

我正在尝试编写自己的词汇表并为我的小兄弟进行测试,但是当我想将文件中的数据读入两个数组时遇到问题 - 首先是英语单词,第二个是波兰语单词。文件看起来很像

黑色 - czarny
红色 - czerwony 等。

还有我的功能:

void VOC::readout()
{
    fstream file;
    VOC *arr = new VOC;
    string line;
    file.open("slowka.txt");
    if(file.good())
    {
        int i=0;
        while(!file.eof())
        {
            getline(file, line);
            size_t pos = line.find(" - "); 
            int position = static_cast<int>(pos);

            file>>arr[i].en;
            file>>arr[i].pl;
            ++i;
        }
    }
}

我认为在第一个数组中插入一行直到函数找到“-”是个好主意,然后将其余行插入到第二个数组中,但我有一些问题。有人可以帮助我吗?我知道我可以通过使用 std::vector 来解决它,但我想通过使用数组来解决它。

【问题讨论】:

  • arr 指向 一个 单个 VOC 对象并且不是数组。由于您不知道有多少,std::vector 是您的最佳选择。
  • 你在用int position = static_cast&lt;int&gt;(pos);做什么?
  • 我认为将 size_t 与 int 进行比较会导致溢出,我错了吗?
  • 与其使用 2 个数组,不如使用包含两个单词的结构中的一个 std::vector

标签: c++ arrays io


【解决方案1】:

如果您坚持使用普通数组,您首先必须计算文件中的行数,然后分配足够的内存。数组 - 与 std::vector 对象不同 - 不会自动增长,但具有固定大小。

话虽如此,请注意使用!file.eof() 并不是读取流直到到达末尾的最佳方式。你可以使用更简单的

std::string line;
while (std::getline(file, line)) {
  // ...
}

idiom 代替,它也处理错误情况。有关更多信息,请参阅this question(和相应的答案)。

【讨论】:

  • 谢谢!我只想完美地学习使用数组,然后进入 std::vector。不敢相信我会忘记分配内存这样显而易见的事情。并且 string::find 在这里使用它是一个好主意吗?
猜你喜欢
  • 1970-01-01
  • 2015-05-04
  • 2018-03-18
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多