Clasa a IX-a · Fișiere textRead in English

Prelucrarea unui fișier pe linii în C++

În engleză: Processing a file line by line

O(n)C++1743 de linii1 exemplufolosește date.in / date.out

Ideea

getline(fin, linie) citește un rând întreg, cu tot cu spații, până la '\n'. Bucla while (getline(fin, linie)) se oprește la sfârșitul fișierului. Numărăm liniile și reținem linia cea mai lungă (prima, la egalitate); în date.out scriem numărul de linii și acea linie.

Descrierea în engleză

getline(fin, linie) reads a whole line, spaces included, up to '\n'. The loop while (getline(fin, linie)) stops at the end of the file. We count the lines and keep the longest one (the first, on ties); date.out receives the number of lines and that line.

Complexitate
O(L), unde L este numărul total de caractere
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare (date.in)

ana are mere
un rand ceva mai lung decat primul
scurt

Ieșire așteptată (date.out)

3
un rand ceva mai lung decat primul

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

prelucrare-pe-linii.cpp
/*
 * Titlu: Prelucrarea unui fișier pe linii
 * Clasa: 9
 * Capitol: Fișiere text
 * Descriere: getline(fin, linie) citește un rând întreg, cu tot cu spații, până
 *            la '\n'. Bucla while (getline(fin, linie)) se oprește la sfârșitul
 *            fișierului. Numărăm liniile și reținem linia cea mai lungă (prima,
 *            la egalitate); în date.out scriem numărul de linii și acea linie.
 * Complexitate: O(L), unde L este numărul total de caractere
 *
 * Exemplu
 * Intrare:
 * ana are mere
 * un rand ceva mai lung decat primul
 * scurt
 * Ieșire:
 * 3
 * un rand ceva mai lung decat primul
 */
#include <fstream>
#include <string>
using namespace std;

int main()
{
    ifstream fin("date.in");
    ofstream fout("date.out");
    string linie, ceaMaiLunga = "";
    int nrLinii = 0;
    while (getline(fin, linie))
    {
        nrLinii++;
        if (linie.size() > ceaMaiLunga.size())
        {
            ceaMaiLunga = linie;
        }
    }
    fout << nrLinii << '\n' << ceaMaiLunga << '\n';
    fin.close();
    fout.close();
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.