2016-11-12 32 views
-1

因此,我想出了以下代碼以打開文本文件並將其保存並使用數組來打印出所有文本。我的問題是,如何訪問文件中的特定單詞或文本。如果我沒有弄錯,應該有一個for循環,但我不太清楚如何去做。C++將文本文件保存在數組中

int main() { 
    ifstream dictionaryFile; 
    dictionaryFile.open("dictionary.txt"); 
    char output[100]; 
    //char wordsFromDictionary[40437][22]; 

    int i=0; 
    if(dictionaryFile.is_open()){ 
     while(!dictionaryFile.eof()){ 
      dictionaryFile >> output; 
      cout<<output<<endl; 
     } 

    } 
    return 0; 
} 
+0

爲什麼要涉及'for'循環? –

+0

現在代碼只顯示文本文件中的所有內容。所以我不應該使用for循環來挑選第n個元素? –

+0

'for'循環不比'while循環更有效率。你可以用'if'語句來使用'strcmp'。 –

回答

0

作爲你有一個字符數組

char output[100]; 

有在該數據結構中的單詞之間沒有區別。文件只是逐字讀取並存儲在數組中。

一個簡單的實現分離成單詞(使用循環按照您的要求,以最小的改動你的代碼),假設單詞用分隔符將

char wordsFromDictionary[40437][22]; 
char delimiter=... 
int i=0; 
int j=0 
char c; 
if(dictionaryFile.is_open()){ 
    while(!dictionaryFile.eof()){ 
     c=dictionaryFile.get(); 
     if(c==delimiter){ 
      i++; 
      j=0; 
     } 
     else if(j<22) { 
      wordsFromDictionary[i][j]=c; 
      j++; 
     } 
    } 
} 

請注意,這只是削減,縮短了超過22個字的詞。

0

如果你想讀一些字符串,顯然的選擇是使用std::string來完成這項工作。如果你希望他們的陣列,它們存儲在一個std::vector

ifstream d("dictionary.txt"); 

std::vector<std::string> words{std::istream_iterator<std::string>(d), {}}; 

這讀取所有的話到載體。如果他們已經排序,那麼可以(例如)使用std::binary_search來查找單詞是否在向量中。