Nisam analizirao tvoj kod..evo uradio sam nesto, nadam se da ce ti pomoci.
Moja ideja je da se:
1) Pronadje najduza linija koja ce nam sluziti kao margina.
2) Ostale linije se prilagodjavaju najduzoj liniji tako sto se izmedju reci ubacuje
n razmaka, tako da se duzina svake linije svodi na duzinu najduze linije.
3) Broj n sam odredjivao po formuli:
n = (DuzinaNajveceLinije - DuzinaTrenutneLinije) / (BrojReci-1)
Ovaj nacin nije u potpunosti precizan jer kolicnik mora biti celobrojna vrednost.
Evo celokupnog koda:
Code:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int najduzaLinija();
void formatiraj(string& linija);
int maxLinija = 0;
int main()
{
ofstream fout("izlaz.txt");
ifstream fin("ulaz.txt");
maxLinija = najduzaLinija();
string linija;
while (getline(fin, linija))
if (linija.size() == maxLinija)
fout << linija << endl;
else
{
formatiraj(linija);
fout << linija << endl;
}
fin.close(), fout.close();
}
int najduzaLinija()
{
ifstream fin("ulaz1.txt");
int maks = 0;
string linija;
while (getline(fin, linija))
if (linija.size() > maks)
maks = linija.size();
fin.close();
return maks;
}
void formatiraj(string& linija)
{
int brRazmaka = 0, duzLinije = linija.size();
for (int i = 0; i < duzLinije; i++)
if (linija[i] == ' ')
brRazmaka++;
int brDodavanja = (maxLinija-duzLinije) / brRazmaka;
duzLinije += brDodavanja * brRazmaka;
for (int i = 0; i < duzLinije; i++)
if (linija[i-1] != ' ' and linija[i] == ' ' and linija[i+1] != ' ')
linija.insert(i, brDodavanja, ' ');
}
Zasad sam primetio 2 problema:
1) Ako se u ulaznom fajlu nalaze prazni redovi (jedan ili vise) program puca, to treba popraviti.
2) Problem predstavlja pozicioniranje u fajlu. Zapravo, posto je potrebno 2 puta proci kroz fajl (prvi put kad se pronalazi najduza linija a drugi put kad se cita sadrzaj fajla) - a u pitanju je sekvencijalna datoteka, treba posle prvog prolaska podesiti file pointer tako da pokazuje opet na pocetak fajla. Ja sam pokusao sa koriscenjem funkcije
fseekg() ali nije uspelo (jer ona radi samo sa binarnim fajlovima?). Zatim sam zatvorio fajl posle prvog prolaska, pa ga ponovo otvorio pri drugom prolasku ali ni to nije dalo dobre rezultate (ne znam zasto?). Kao krajnje sigurno (ali lose) resenje, tekst koji treba formatirati podelio sam u dva fajla>
ulaz1.txt i
ulaz.txt i resio problem kao sto je i primenjeno u kodu....
Ovom prilikom bih zamolio iskusnije programere da pomognu kako da se vrsi pozicioniranje u tekstualnom fajlu.
S obzirom da je proslo 3 cuke, ocekujem vise bagova
