2016-04-11 8 views
0

EDIT:これは私が取り組んでいる宿題に関する質問です。私はfor/whileループをコードのどこにでも使用することはできません。プログラムのポイントは、ユーザーに単語を入力させることです。そして、辞書を検索してアナグラムを探します。whileループではなく、どのようにファイルを再帰的に読み込みますか?

whileループやforループを使用するのではなく、コード内でどこでも再帰を使用しようとしています。私は、再帰に次のコードを変更する方法について困惑:回答

while (!infile.eof()) 
{ 
    string line; 
    getline(infile, line); 
    dictionary.push_back(line); //using a vector to store a dictionary 
} 
+0

再帰を使用して解決しようとしている問題の詳細をお知らせください。 C++でのファイルの読み込みは線形の傾向があります。 –

+0

私はそれを再帰的に読んでいなくても、そういうことはしません。 [これを読んで理由を調べる](https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – WhozCraig

+1

なぜあなたはどこでも再帰を使用しようとしていますコード? – Harry

答えて

1

何か

void readLine(/*some parameters here*/) { 
    string line; 
    getline(infile, line); 
    dictionary.push_back(line) 
    if (!infile.eof()) 
     readLine(/*some parameters here*/); 
} 

よう言うまでもなく、それはファイルを読むための奇妙な方法です。

2

私は正直にこれをしたいと思う理由の手掛かりを持っていない、しかし:

void read_file_recursively(std::istream& inp, std::vector<std::string>& v) 
{ 
    std::string s; 
    if (std::getline(inp, s)) 
    { 
     v.emplace_back(std::move(s)); 
     read_file_recursively(inp, v); 
    } 
} 
+0

これは宿題に関する質問です: -/ – Kelevera

+0

は、ベクトルの代わりに配列を使ってこれを行う方法です。追加のローカル変数はありません。 –

+0

@Fence_riderその質問は、OPの元の投稿よりも不鮮明です。私はあなたが実際に何を意味するか分かりません。関数の再帰的性質は、引数が参照渡され、*どこか*から来なければならないことを示しているため、ローカルではないため、前提条件によって失格となります。また、配列の使用は、トップエンドの大きさを知り、範囲外の索引付けを避ければ実行可能です(トップエンドも同様に引数になり、呼び出し元によっても渡されます)。 – WhozCraig

0

私は本当にあなたのアイデアがループを放棄ещ理解していません。しかし、あなたがしたい場合は...私はあなたが2つの以下の機能を参照してくださいお勧め:最後の1を呼び出す

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

void printFileFromBegin(ifstream &f) 
{ 
    string s; 
    getline(f, s); 
    cout << s << endl; 
    if (!f.eof()) 
     printFileFromBegin(f); 
} 

void printFileFromEnd(ifstream &f) 
{ 
    string s; 
    getline(f, s); 
    if (!f.eof()) 
     printFileFromEnd(f); 
    cout << s << endl; 
} 

例:

f.open(fmane); 
    if (f.is_open()) 
    { 
     printFileFromEnd(f); 
     f.close(); 
    } 

最初に最後のファイルから印刷ラインにつながります。

関連する問題