Witam, tworząc projekt na zajęcia z programowania trafiłem na problem, którego nie potrafię przejść.
Mam plik tekstowy, w którym znajdują się takie informacje:
07:23-19:34 cz gr1 Astronomia
10:15-11:45 wt gr2 Fizyka
Muszę teraz posortować dane w tym pliku w taki sposób, by linia w której znajduję się "wt" była nad "cz", czyli inaczej mówiąc po prostu chronologicznie wg. dnia tygodnia. Oczywiście takich linijek może być dużo więcej i dni tygodnia zapisywane są : "pn,wt,sr,cz,pt,sb,nd" a jeżeli pojawią się zajęcia, które są w tym samym dniu to muszą być posortowane wg. godziny w której mają miejsce.Mój kod źródłowy na tym etapie wygląda tak:
#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 dodawanie(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 zapisz(lista glowa)//zapisywanie listy do osobnego pliku
{
lista kolejny;
kolejny = glowa;
while (kolejny != NULL)
{
fstream plik_wyjsciowy;
plik_wyjsciowy.open(kolejny->nazwisko + ".txt", ios::out | ios::app);
plik_wyjsciowy << kolejny->godzina << " ";
plik_wyjsciowy << kolejny->dzien << " ";
plik_wyjsciowy << kolejny->grupa << " ";
plik_wyjsciowy << kolejny->przedmiot << endl;
kolejny = kolejny->nast;
}
cout << "\n";
};
int main()
{
fstream plik;
string sciezka;
cout << "Wpisz nazwe/sciezke do pliku zawierajcego dane:";
cin >> sciezka;
plik.open(sciezka);
if (plik.is_open())
{
string wers;
string godzina, dzien, grupa, nazwisko, przedmiot;
cout << "Plik wczytano poprawnie!" << 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;
dodawanie(glowa, godzina, dzien, grupa, nazwisko, przedmiot); //dodanie pobranych danych z pliku do listy
}
}
else
{
cout << "Plik nie zostal wczytany, sprobuj ponownie" << endl;
}
zapisz(glowa);
return 0;
}
Widziałem już podobny temat na innym forum, chłopak chyba miał ten sam temat projektu co ja tylko inaczej wtedy wyglądał. Ja muszę stworzyć pliki dla każdego osobnego wykładowcy i do tych plików z jego nazwiskiem umieścić jego zajęcia, a zajęcia mają być posortowane chronologicznie. Z tego co widziałem jemu się to nie udało. Muszę nadmienić, że w warunkach projektu zakazane jest używanie publicznych kontenerów typu vector, czy list.