2016-02-12 59 views
0

我试图写我自己的词汇与我的小兄弟一个考验,但我有一个问题,当我想从文件中读取数据到两个数组 - 与英文单词第一,第二和用波兰语单词。文件看起来都阅读文件成两个阵列

黑 - 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来解决它,但我很关心使用数组来做到这一点。

+1

'arr'指向*一个*单个'VOC'对象,并且不是*数组。由于你不知道有多少,所以'std :: vector'是你最好的选择。 – crashmstr

+1

什么是你用'INT位置=的static_cast (POS)做;'? – NathanOliver

+0

我认为比较size_t和int会导致溢出,我错了吗? –

回答

2

如果你坚持使用普通阵列,你首先要算在你的文件中的行数,然后分配足够的内存。阵列 - 不像std::vector对象 - 不会自动增长,但有一个固定的大小。

话虽这么说,注意使用!file.eof()不是读流直至到达终点的最佳途径。您可以使用更简单的

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

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

+0

谢谢!我只想学习使用完美的数组,然后进入std :: vector。我不能相信我可以忘记分配内存这么明显的事情。 而且是字符串::找到一个好主意在这里使用它? –