Как вы читаете в файле рекурсивно вместо цикла 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();
}
приводит к печати строк из вашего файла от последнего к первому.