Grade 9 · Text filesCitește în română
Processing a file line by line
Original: Prelucrarea unui fișier pe linii
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
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.
/*
* 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.