Как вы читаете в файле рекурсивно вместо цикла while?

РЕДАКТИРОВАТЬ: Это вопрос домашней работы, над которой я работаю. Я не могу использовать циклы for / while нигде в моем коде. Смысл программы в том, чтобы пользователь вводил слово, а затем он будет искать в словаре анаграммы.

Я пытаюсь использовать рекурсию везде в моем коде, а не использовать цикл while или цикл for. Я озадачен тем, как преобразовать следующий код в рекурсию:

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

3 ответа

Я, честно говоря, понятия не имею, почему вы хотели бы сделать это, но:

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 readLine(/*some parameters here*/) {
    string line;
    getline(infile, line);
    dictionary.push_back(line)
    if (!infile.eof())
        readLine(/*some parameters here*/);
}

Излишне говорить, что это странный способ прочитать файл.

Я правда не понимаю твоей идеи ещё отказаться от петель. Но если вы хотите... Я предлагаю вам увидеть две следующие функции:

#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();
    }

приводит к печати строк из вашего файла от последнего к первому.

Другие вопросы по тегам