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
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)
- Capitol
- Fișiere text
Exemple
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.
/*
* 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.