Считать из файла текст с несколькими абзацами
Подскажите, как считать из файла текст, в котором находится несколько абзацев. Я считываю вот так:
string text;
ifstream in("input.txt");
if (in.is_open())
getline(in, text);
Но данный код считывает только первый абзац. Как можно решить эту проблему?
Ответы (2 шт):
у string есть конструктор который принимает input итераторы, его можно использовать чтобы записать весь txt файл в строку
#include <iostream>
#include <fstream>
#include <iterator>
int main()
{
std::ifstream in("input.txt", std::ios_base::in);
std::string text(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>());
std::cout << text;
}
getline по умолчанию до '\n' (конца строки) считывает или если файл заканчивается, поэтому у вас не весь текст в строке оказывается
Вам показалось что ваша программа прочитала абзац текста. В действительности программа прочитала только одну строку. Просто строка длинная и при отображении не помещается в экран по ширине. Вот вы её и видите как несколько строк или абзац текста. Но технически это одна строка.
Вам нужно прочитать все строки из файла. Проще всего это делать в цикле while. getline возвращает истину если очередная строка прочитана и ложь иначе:
std::string line;
while (getline(in, line)) {
// process one line
}
Если вы не хотите обрабатывать текст построчно, то можно прочитать файл целиком. Прямолинейного способа нет, есть разные трюки. Например трюк, когда вы копируете файловый поток в строковый поток, а из строкового потока получаете строку:
stringstream buffer;
buffer << in.rdbuf();
string text = buffer.str();