Grade 9 · Text filesCitește în română

Processing a file line by line

Original: Prelucrarea unui fișier pe linii

O(n)C++1743 lines1 exampleuses date.in / date.out

The idea

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.

Original description (Romanian)

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.

Complexity
O(L), where L is the total number of characters
Grade
Grade 9 (Clasa a IX-a)
Chapter
Text files

Examples

Example 1

Input (date.in)

ana are mere
un rand ceva mai lung decat primul
scurt

Expected output (date.out)

3
un rand ceva mai lung decat primul

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

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;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.