2016-02-12 105 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。我不能相信我可以忘記分配內存這麼明顯的事情。 而且是字符串::找到一個好主意在這裏使用它? –