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


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

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

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

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

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

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

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

#include <iostream>
#include <fstream>

using namespace std;
int main (){

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

  inFile >>

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

5 65

5 ответов:

можно использовать 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');
}  

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

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

int main() {

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

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

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

Ну, для этого можно также использовать функцию freopen, представленную в C++ -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;
}

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

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

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

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