2016-11-12 9 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

今すぐコードはテキストファイルのすべてを表示します。だから私はn番目の要素を選ぶためにforループを使用してはいけませんか? –

+0

'for'ループは' while'ループより効率的ではありません。 'strcmp'を' if'文とともに使うことができます。 –

答えて

0

あなたはchar型の配列

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を使用して、単語がベクター内にあるかどうかを調べることができます。

関連する問題