#include #include #include using namespace std; struct pozost { string data; string nazwamaratonu; string czas; pozost *nast; pozost(); }; pozost::pozost() //konstruktor { nast = 0; } struct zawodnik { string nazwisko; zawodnik *nast; pozost *dane; zawodnik(); }; zawodnik::zawodnik() //konstruktor { nast = 0; } void DodajPozost(pozost *&head, string &date, string &nameofmaraton, string &time); void DodajZawodnika(zawodnik *&head, string &vorname, string &date, string &nameofmaraton, string &time); void UtworzPlik(string &vorname, string &date, string &nameofmaraton, string &time); void Drukuj(zawodnik *head); int main() { /* _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_ALLOC_MEM_DF); ifstream plikSPR; plikSPR.open("DetectMemoryLeaks.h"); if (!plikSPR.is_open()) { cerr << "Bład otwierania pliku"; exit(EXIT_FAILURE); } #include "DetectMemoryLeaks.h" */ zawodnik *glowa = nullptr; string * pliki = new string[2]; pliki[0] = "2.txt"; pliki[1] = "3.txt"; for (int i = 0; i < 2; i++) { ifstream plik1; plik1.open(pliki[i]); if (!plik1.is_open()) { cerr << "Bład otwierania pliku"; exit(EXIT_FAILURE); } string separator = ","; string linianazwa, liniadata, n1, n2, nazw, cza; int a, b; getline(plik1, linianazwa); getline(plik1, liniadata); while (!plik1.eof()) { plik1 >> a; //sciąga niepotrzebne dane plik1 >> n1; //sciąga przecinek plik1 >> nazw; nazw = nazw.substr(0, nazw.find(separator)); plik1 >> b; //sciąga niepotrzebne dane plik1 >> n2; //sciąga przecinek plik1 >> cza; DodajZawodnika(glowa, nazw, liniadata, linianazwa, cza); } } getchar(); getchar(); Drukuj(glowa); return 0; } void DodajPozost(pozost *&head, string &date, string &nameofmaraton, string &time) { pozost *p1 = head; if (head->data > date) { p1->nast = head; head = p1; //head->data = date; //head->nazwamaratonu = nameofmaraton; head->czas = time; } else if (head->nast == nullptr) { head->nast = new pozost; head->nast->data = date; head->nast->nazwamaratonu = nameofmaraton; head->nast->czas = time; } else { pozost *p2 = head; pozost *p3 = head->nast; while (p3 != nullptr) { if (p3->data < date) { p3 = p3->nast; p2 = p2->nast; } else break; } if (p3) { p2->nast = new pozost; p2 = p2->nast; // p2->data = date; // p2->nazwamaratonu = nameofmaraton; p2->czas = time; p2->nast = p3; } else { p2->nast = new pozost; // p2->data = date; // p2->nazwamaratonu = nameofmaraton; p2->czas = time; } } } void DodajZawodnika(zawodnik *&head, string &vorname, string &date, string &nameofmaraton, string &time) { if (head == nullptr) { head = new zawodnik; head->nazwisko = vorname; head->nast = nullptr; head->dane = new pozost; head->dane->czas = time; head->dane->data = date; head->dane->nazwamaratonu = nameofmaraton; head->dane->nast = nullptr; return; //DodajPozost(head->dane, date, nameofmaraton, time); } else { zawodnik *z1 = head; while (1) { if (z1->nast == nullptr) { z1->nast = new zawodnik; z1 = z1->nast; z1->nazwisko = vorname; z1->nast = nullptr; z1->dane = new pozost; z1->dane->czas = time; z1->dane->data = date; z1->dane->nazwamaratonu = nameofmaraton; z1->dane->nast = nullptr; return; //DodajPozost(z1->dane, date, nameofmaraton, time); } if (vorname == z1->nazwisko) { DodajPozost(z1->dane, date, nameofmaraton, time); return; } z1 = z1->nast; } } //UtworzPlik(vorname, date, nameofmaraton, time); } void Drukuj(zawodnik *head) { if (head != nullptr) { string nazwapliku = head->nazwisko; nazwapliku += ".txt"; fstream plik; plik.open(nazwapliku, ios_base::app); //app - dołącz tylko na końcu pliku if (!plik.is_open()) { cerr << "Bład otwierania pliku"; exit(EXIT_FAILURE); } plik << head->nazwisko << endl << endl; for (pozost* i = head->dane; i != nullptr; i = i->nast) { plik << i->data << " " << i->nazwamaratonu << " " << i->czas << endl; } plik.close(); Drukuj(head->nast); } } void UtworzPlik(string &vorname, string &date, string &nameofmaraton, string &time) { string nazwapliku = vorname; nazwapliku += ".txt"; fstream plik; plik.open(nazwapliku, ios_base::app); //app - dołącz tylko na końcu pliku if (!plik.is_open()) { cerr << "Bład otwierania pliku"; exit(EXIT_FAILURE); } int licznik = 0; if (licznik == 0) { plik << vorname; plik << "n"; plik << date << " " << nameofmaraton << " " << time; } if (licznik != 0) { plik << date << " " << nameofmaraton << " " << time; } licznik++; plik.close(); }