C++ 如何以递归方式而不是while循环读取文件?

C++ 如何以递归方式而不是while循环读取文件?,c++,recursion,while-loop,C++,Recursion,While Loop,编辑:这是我正在做的家庭作业问题。我的代码中任何地方都不能使用for/while循环。该程序的目的是让用户输入一个单词,然后在字典中搜索字谜 我尝试在代码中的任何地方使用递归,而不是使用while循环或for循环。关于如何将以下代码更改为递归,我感到困惑: while (!infile.eof()) { string line; getline(infile, line); dictionary.push_back(line); //using a vector to s

编辑:这是我正在做的家庭作业问题。我的代码中任何地方都不能使用for/while循环。该程序的目的是让用户输入一个单词,然后在字典中搜索字谜

我尝试在代码中的任何地方使用递归,而不是使用while循环或for循环。关于如何将以下代码更改为递归,我感到困惑:

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

void readLine(/*some parameters here*/) {
    string line;
    getline(infile, line);
    dictionary.push_back(line)
    if (!infile.eof())
        readLine(/*some parameters here*/);
}
不用说,读取文件是一种奇怪的方式。

类似

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

不用说,读取文件是一种奇怪的方式。

我真的不知道你为什么要这样做,但是:

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);
    }
}
void以递归方式读取文件(std::istream&inp,std::vector&v)
{
std::字符串s;
如果(标准::getline(inp,s))
{
v、 向后安放(标准:移动);
递归读取文件(inp,v);
}
}

老实说,我不知道您为什么要这样做,但是:

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);
    }
}
void以递归方式读取文件(std::istream&inp,std::vector&v)
{
std::字符串s;
如果(标准::getline(inp,s))
{
v、 向后安放(标准:移动);
递归读取文件(inp,v);
}
}

我真的不明白你放弃循环的想法。但是如果你想。。。我建议您看到以下两个功能:

#包括
#包括
#包括
使用名称空间std;
void printfilefromfeagin(ifstream&f)
{
字符串s;
getline(f,s);

cout我真的不理解你放弃循环的想法。但是如果你想…我建议你看看以下两个函数:

#包括
#包括
#包括
使用名称空间std;
void printfilefromfeagin(ifstream&f)
{
字符串s;
getline(f,s);


CUT请让我们知道你试图用递归解决的问题的细节。读C++中的文件往往是线性的。即使我没有递归地阅读它,我也不会这样做。为什么你要在代码中到处使用递归?递归可以使代码看起来不错,但通常会有更高的内存。注意,你要做的是正确的原因。要递归地读取文件,读文件的第一行;然后递归地读取文件。请用递归来告诉我们你正在试图解决的问题的一些细节。读C++中的文件往往是线性的。即使我没有读过,也不会这样做。递归读取。为什么要在代码中的任何地方都使用递归?递归可以使代码看起来更漂亮,但通常会有更高的内存开销。请注意,这样做的原因是正确的。要递归读取文件,请读取文件的第一行;然后,递归读取文件。有没有一种方法可以使用数组执行此操作不是向量,没有任何额外的非局部变量?@Fence_rider这个问题比OP的原始帖子更模糊。我不知道你的真正意思。函数的递归性质表明参数是通过引用传入的,它们必须来自某个地方,因此它们不是局部的,因此不合格根据您的前提条件,使用数组是可行的,只要您知道顶端的大小并避免超出范围的索引(这样的顶端可能也是一个参数,因此也会被调用方传递).@WhozCraig正如op所说,这是一个家庭作业。我的老师恰好更严格。无论如何,我只能用一个按值传递的数组和一个按引用传递的ifstream(数组大小常量除外)。在我的前提下,我的意思是我不能使用任何未传递给函数或decla的变量红色在所述函数中。@Fence\u rider这听起来像是一个不同的问题,也许可以证明它自己的问题。它听起来像是指向第一个元素的升序指针,降序大小是有序的,但这只是一个猜测。有没有一种方法可以用数组而不是向量,并且没有任何额外的非局部变量来做到这一点?@Fence\u ri这个问题比OP的原始帖子更模糊。我不知道你的真正意思。函数的递归性质表明参数是通过引用传入的,它们必须来自某个地方,因此它们不是局部的,因此不符合你的前提条件。只要你知道顶端大小并避免超出范围的索引(这样的顶端可能也是一个参数,因此也会被调用者传递).@WhozCraig正如op所说,这是一个家庭作业。我的老师恰好更严格。无论如何,我只能用一个按值传递的数组和一个按引用传递的ifstream(数组大小常量除外)。在我的前提下,我的意思是我不能使用任何未传递给函数或decla的变量红色在所述函数中。@Fence_rider听起来像是另一个问题,可能也证明了它自己的问题。它听起来像是指向第一个元素的升序指针,降序大小是正确的,但这只是一个猜测。