Подтвердить что ты не робот

Как читать строки за строкой или весь текстовый файл сразу?

Я участвую в учебнике, в котором представлены файлы (как читать и писать из\в файл).

Прежде всего, это не домашнее задание, это просто общая помощь, которую я ищу.

Я знаю, как читать одно слово за раз, но я не знаю, как читать по одной строке за раз или как читать весь текстовый файл.

Что делать, если мой файл содержит 1000 слов? Невозможно прочитать каждое слово.

Мой текстовый файл с именем (Read) содержит следующее:

Я люблю играть в игры я люблю читать У меня есть 2 книги

Это то, что я сделал до сих пор:

#include <iostream>
#include <fstream>

using namespace std;
int main (){

  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

Есть ли какой-либо возможный способ сразу прочитать весь файл, вместо того, чтобы читать каждую строку или каждое слово отдельно?

4b9b3361

Ответ 1

Вы можете использовать std::getline:

#include <fstream>
#include <string>

int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

Также обратите внимание, что лучше всего просто создать поток файлов с именами файлов в нем, а не явно открывать (то же самое касается закрытия, просто дайте деструктору выполнить работу).

Дополнительная документация о std::string::getline() может быть прочитана в Ссылка CPP.

Вероятно, самый простой способ прочитать весь текстовый файл - это просто конкатенация полученных строк.

std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
  file_contents += str;
  file_contents.push_back('\n');
}  

Ответ 2

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

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

int main() {

ifstream file("filename.txt");
string content;

while(file >> content) {
cout << content << ' ';
}
return 0;
}

Ответ 3

Я думаю, вы могли бы использовать функцию istream.read(). Вы можете просто заколебаться с разумным размером куска и напрямую прочитать буфер памяти, а затем добавить его в какой-то произвольный контейнер памяти (например, std::vector). Я мог бы написать пример, но я сомневаюсь, что вы хотите получить полное решение; сообщите мне, если вам понадобится дополнительная информация.

Ответ 4

Ну, для этого также можно использовать функцию freopen, предоставленную в С++, http://www.cplusplus.com/reference/cstdio/freopen/ и читать файл по строкам как следует -:

#include<cstdio>
#include<iostream>

using namespace std;

int main(){
   freopen("path to file", "rb", stdin);
   string line;
   while(getline(cin, line))
       cout << line << endl;
   return 0;
}

Ответ 5

Другой метод, который еще не упоминался, std::vector.

std::vector<std::string> line;

while(file >> mystr)
{
   line.push_back(mystr);
}

Затем вы можете просто перебрать вектор и изменить/извлечь то, что вам нужно/