2014-04-01 42 views
0

我想運行這個,但該文件不斷加載失敗。我想要做的是將一個字典加載到一個數組的每個級別佔一個字的數組。試圖打開文件使用fstream,但它不工作

#include <iostream> 
#include <string> 
#include <fstream>> 
#include <time.h> 
#include <stdlib.h> 

using namespace std; 

int Rand; 

void SetDictionary(){ 
srand(time(NULL)); 
Rand = rand() % 235674; 
fstream file("Hangman.txt"); 
if(file.is_open()){ 
    string Array[235675]; 

    for(int X = 0; X < 235673; X++){ 
     file >> Array[X]; 
    } 
    cout << Array[Rand]; 
    }else{ 
    cout << "Unable To Open File\n"; 
} 
} 

int main(){ 
SetDictionary(); 
} 
+1

如果文件不完全具有235675個字,會發生什麼情況? –

+0

我很確定這是一些環境問題;設置正確的路徑並從相對於它的正確目錄運行。 – legends2k

+0

正如你可能會告訴我,我是一個初學者在C + +和文件實際上有235674字(我解決了這個問題,我認爲)。謝謝。 – user3487267

回答

4
vector<string> words; 
{ 
    ifstream file("Hangman.txt"); 
    string word; 
    while (file >> word) 
    { 
     words.push_back(word); 
    } 
} 

string randword = words[rand() % words.size()]; 
+0

如果文件已知有大量的單詞,你可以通過預先分配內存來加速一點,例如, 'words.reserve(235674)'。 –

+0

@MattMcNabb好吧,看起來他只想從整個一堆中取出一個字,所以它可以加快很多方面:) –

+0

是的。我假設他以後想用加載的字典做其他事情,但是根據程序的名稱來判斷,也許不會。 –

0

起初,我看到COUT < <數組[蘭德]完成後,你不要重複陣列。在這種情況下,你根本不需要數組。如果條件X ==蘭德,然後中斷,則逐行讀入文件到temp變量中並輸出該變量。 其次,實施可以改進。假設你試圖從文件中隨機選擇一個詞。將Rand生成爲0..file-size將會快1000倍,然後抵消該Rand。現在,你在所需的單詞「內部」,任務是分別爲工作開始和結束回讀和轉發。該算法將顯示有點不同的概率分佈。 第三。如果您打算重用文件數據,將整個文件讀入內存會更快,然後按文字分割,將字偏移存儲爲整數數組。 最後。有了真正巨大的字典(或者如果程序在有限的內存上運行),只能存儲單詞偏移量,並且可以即時重新讀取字典內容。

相關問題