Jestem w trakcie kodowania programu, który ma wyrównywać wprowadzony doń tekst, tudzież wczytany z pliku do 120 znaków w linii.
Jeśli 120 znak to środek słowa, całe słowo leci do nowej linii i tak do końca. Potem brakująca ilość znaków ma być uzupełniana spacjami do 120 w każdej linii.
Aktualnie problemem jest dla mnie dzielenie tego tekstu na kolejne wiersze, większość trzyma się kupy, jest mniej niż 120, ale czasami znajduje się jakiś szalony, który ma kilka znaków więcej.
Od kilku godzin próbuję znaleźć błąd, lecz nie za bardzo mi to wychodzi. Daję cały kod, funkcja w której jest problem to justowanie dopomóżcie :)
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;
void justowanie(string tekst)
{
string justed;
int miejscespacji=0, x=1, y=0;
cout << tekst;
for(int i=0; i<tekst.length();i++)
{
if(x!=120 || i==0)
justed+=tekst[i];
if(x==120)
{
if(tekst[i]==' ')
{
justed+="\n";
}
else
{
justed.insert(miejscespacji,"\n");
justed.erase(miejscespacji+1,1);
}
x=1;
justed+=tekst[i];
}
if(justed[i]==' ')
miejscespacji=i;
if(justed[justed.length()-1]==' ' && justed[justed.length()-2]=='\n')
{
justed.erase(justed.length()-1, 1);
}
x++;
}
ofstream zapis;
zapis.open("wyjustowany.txt");
zapis << justed;
zapis.close();
}
bool start()
{
int choose;
cout <<"Program justuje tekst z pliku (.txt) o podanej nazwie, lub wczytany z klawiatury\n";
system("pause"); system("cls");
cout <<"Wczytac tekst z pliku, czy zostanie podany ?\n1.Z pliku.\n2.Podany.\nTwoj wybor: ";
do{
cin >> choose;
if(!cin || choose!=1 && choose!=2)
{
cout <<"\nPodaj poprawna liczbe: ";
cin.clear();
cin.sync();
}
}while(!cin || choose!=1 && choose!=2);
system("pause"); system("cls");
if(choose==1)
return 1;
else
return 0;
}
void zpliku ()
{
int choose;
ifstream plik;
string nazwapliku,tekst;
do{
cout <<"Podaj nazwe pliku (bez rozszerzenia), z ktorego wczytac tekst: ";
cin >> nazwapliku;
nazwapliku+=".txt";
plik.open(nazwapliku.c_str());
if(plik.is_open())
{
while(plik.good())
{
getline(plik, tekst);
}
justowanie(tekst);
choose=2;
}
else
{
cout <<"Problem z odczytem pliku. \nBrak pliku o takiej nazwie, lub plik nie jest plikiem .txt";
cout <<"\n\n1.Podaj nazwe ponownie.\n2.Wyjdz.\n\nWybor: ";
do{
cin >> choose;
if(!cin || choose!=1 && choose!=2)
{
cout <<"\nPodaj poprawna liczbe: ";
cin.clear();
cin.sync();
}
}while(!cin || choose!=1 && choose!=2);
}
system("pause"); system("cls");
}while(!cin || choose==1 );
}
void stdstr()
{
string tekst;
cout <<"Podaj tekst, ktory ma zostac wyjustowany: ";
cin.clear();
cin.sync();
getline(cin, tekst);
justowanie(tekst);
}
main()
{
if(start())
zpliku();
else
stdstr();
return 0;
}
Tutaj dorzucam link do zdjęcia jak to u mnie po justowaniu wygląda. 2 najdłuższe linijki są za długie.
http://i.imgur.com/TqWAALt.jpg