Witam. Mam problem z tym w jaki sposób mam posortować dane z pliku.
W pliku tekstowym znajdują się takie dane:
08:30-10:00 pt gr1 Kowalski Programowanie
10:15-11:45 wt gr2 Nowak Elektrotechnika
14:34-15:43 sr gr2 Kowalski Java
08:30-11:00 sr gr3 Kowalski PHP
08:30-10:00 cz gr1 Polak Filozofia
11:15-12:50 wt gr1 Polak WF
07:23-19:34 cz gr1 Nowak Astronomia
15:00-16:15 wt gr1 Kowalski BHP
09:00-10:30 wt gr2 Polak WF
08:30-11:00 sr gr3 Kowalski PHP
09:18-12:00 pt gr3 Nowak Fizyka
Muszę pobrać dane z pliku i stworzyć 3 pliki tekstowe o nazwach zgodnych z nazwiskami(czyli pliki: Polak, Kowalski, Nowak). W tych plikach mają znajdować się plany dla każdej osoby posortowany względem dni i godzin(np.
10:15-11:45 wt gr2 Nowak Fizyka
07:23-19:34 cz gr1 Nowak Astronomia
09:18-12:00 pt gr3 Nowak Fizyka
)
Pomyślałem, że dobrym pomysłem będzie posortować nazwiska i podzielić je na grupy w których będę sortować dni i godziny. Nie mam niestety pomysłu jak to zrobić. Próbowałem sortować te nazwiska ale nigdy mi się to nie udało.
PS: Nie wiem czemu ale lista wyświetla się na odwrót i powielony jest pierwszy wyświetlany wers.
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
#include <sstream>
using namespace std;
struct dane //struktura z danymi i wskaznikiem na nastepny element
{
string godzina;
string dzien;
string grupa;
string nazwisko;
string przedmiot;
dane *nast;
};
typedef dane* lista;
lista glowa = NULL;
lista wsk = NULL;
void prosta(lista &glowa, string godzina,string dzien, string grupa, string nazwisko, string przedmiot) // dodawanie nowego elementu do listy
{
glowa = new dane;
glowa->godzina = godzina;
glowa->dzien = dzien;
glowa->grupa = grupa;
glowa->nazwisko = nazwisko;
glowa->przedmiot = przedmiot;
glowa->nast = wsk;
wsk = glowa;
}
void drukuj(lista glowa) //wyswietlenie listy
{
lista kolejny;
kolejny = glowa;
while (kolejny != NULL)
{
cout << kolejny->godzina << " " << kolejny->dzien << " " << kolejny->grupa << " "
<< kolejny->nazwisko << " " << kolejny->przedmiot << endl;
kolejny = kolejny->nast;
}
cout << "\n";
}
int main(int argc, char *argv[])
{
fstream plik;
plik.open("sciezka do pliku");
if (plik.is_open())
{
string wers;
string godzina, dzien, grupa, nazwisko, przedmiot;
cout << "DOBRZE" << endl;
int liczby;
string a, b;
while (!plik.eof())
{
getline(plik, wers);
istringstream is(wers); //dzielenie wersu na czesci
is >> godzina >> dzien >> grupa >> nazwisko >> przedmiot;
prosta(glowa, godzina, dzien, grupa, nazwisko, przedmiot); //dodanie pobranych danych z pliku do listy
//--------------------------------------------------- ten fragment kodu nie jest na razie uzywany
a = godzina[0]; //
b = godzina[1]; //
godzina = a + b; // sparowanie dwoch pierwszych cyfr typu string w
liczby = atoi(godzina.c_str()); // zamiana pierwszych dwoch cyfr typu string na int
//-----------------------------------------------------------
}
}
else
{
cout << "ZLE" << endl;
}
drukuj(glowa);
}