2014-04-01 43 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。现在,你在所需的单词“内部”,任务是分别为工作开始和结束回读和转发。该算法将显示有点不同的概率分布。 第三。如果您打算重用文件数据,将整个文件读入内存会更快,然后按文字分割,将字偏移存储为整数数组。 最后。有了真正巨大的字典(或者如果程序在有限的内存上运行),只能存储单词偏移量,并且可以即时重新读取字典内容。

相关问题