Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- // ova struktura ce nam sluziti za VEZANU LISTU rijeci
- struct listaElement {
- char rijec[30];
- unsigned int brojPonavljanja;
- unsigned int redniBroj;
- listaElement* sljedeciElement;
- };
- // ova struktura ce nam sluziti za POLJE rijeci (i zato nema sljedeciElement kao sto ima struktura za vezanu listu!)
- struct rijecData {
- char rijec[30];
- unsigned int brojPonavljanja;
- unsigned int redniBroj;
- };
- int main() {
- ifstream inputDatoteka("datoteka.txt");
- listaElement* lista = NULL;
- listaElement* prosliElement;
- unsigned int brojElemenata = 0;
- char rijec[50];
- // s obzirom na to da je inputDatoteka obican input stream, za razdvajanje kod razmaka
- // mozemo koristiti operator >>, isto kao i kod cin-a!
- // tnx Lucas veoma genijalno
- while (inputDatoteka>>rijec) {
- // pretvoriti svako slovo u malo
- for(int i=0;i<strlen(rijec);i++) {
- if((rijec[i]<65 || rijec[i]>90) && (rijec[i]<97 || rijec[i]>122)) rijec[i]='\0';
- if(rijec[i] >= 'A' && rijec[i] <= 'Z')
- rijec[i] += 32;
- }
- bool elementPronaden = false;
- listaElement* element = new listaElement; // isto kao listaElement element; samo sto je dinamicki alocirano
- brojElemenata ++;
- element->redniBroj = brojElemenata;
- if(lista==NULL) lista=element;
- else {
- listaElement* searchElement = lista;
- while(searchElement != NULL) {
- /* ako je rijec vec pronadena u listi onda je duplikat, onda cemo obrisati
- novi element iz liste (jer je duplikat), a postojecoj rijeci cemo povecati broj ponavljanja */
- if(!strcmp(rijec, searchElement->rijec)) {
- searchElement->brojPonavljanja += 1;
- delete element;
- brojElemenata --;
- elementPronaden = true;
- }
- searchElement = searchElement->sljedeciElement;
- }
- if(!elementPronaden) {
- prosliElement->sljedeciElement = element;
- }
- }
- if(!elementPronaden) {
- strcpy(element->rijec,rijec); // dok imas bilo kakvu strukturu kreiranu sa "new", koristi -> umjesto .
- element->brojPonavljanja=1;
- element->sljedeciElement=NULL;
- prosliElement = element;
- }
- }
- // kreirati strukturu u koje cemo spremiti polje podataka o rijecima i ukupan broj rijeci
- struct fileStruktura {
- rijecData *rijeci; // ovo ce biti dinamicko alocirano polje, zasad pokazivac, kasnije cemo alocirati
- unsigned int brojElemenata;
- };
- fileStruktura zapisStruktura;
- zapisStruktura.rijeci = new rijecData[brojElemenata];
- zapisStruktura.brojElemenata = brojElemenata;
- for(int i=0;i<brojElemenata;i++) {
- strcpy(zapisStruktura.rijeci[i].rijec, lista->rijec);
- zapisStruktura.rijeci[i].brojPonavljanja = lista->brojPonavljanja;
- zapisStruktura.rijeci[i].redniBroj = lista->redniBroj;
- lista = lista->sljedeciElement;
- }
- for (int i = brojElemenata-1; i > 0; i--) {
- for (int j = 0; j < i; j++)
- if (
- zapisStruktura.rijeci[j].brojPonavljanja < zapisStruktura.rijeci[i].brojPonavljanja ||
- (zapisStruktura.rijeci[j].brojPonavljanja == zapisStruktura.rijeci[i].brojPonavljanja &&
- (strcmp(zapisStruktura.rijeci[j].rijec, zapisStruktura.rijeci[i].rijec) == 1))
- ) {
- rijecData pom = zapisStruktura.rijeci[j];
- zapisStruktura.rijeci[j] = zapisStruktura.rijeci[i];
- zapisStruktura.rijeci[i] = pom;
- }
- }
- // ako binarna datoteka ne postoji, append ce ju kreirati, ovaj open/close sluzi samo za kreiranje datoteke
- fstream kreiraj("bindat.dat", ios::app);
- kreiraj.close();
- // zapisemo cijelu strukturu u binarnu datoteku
- fstream bindat("bindat.dat", ios::binary | ios::out);
- bindat.write((char*)&zapisStruktura, sizeof(zapisStruktura));
- bindat.close();
- // ucitamo cijelu strukturu iz datoteke u varijablu "citanjeStruktura"
- fileStruktura citanjeStruktura;
- fstream readdat("bindat.dat", ios::binary | ios::in);
- readdat.read((char*)&citanjeStruktura, sizeof(citanjeStruktura));
- readdat.close();
- // sada u varijabli "citanjeStruktura" mozemo pristupiti svim rijecima iz datoteke!!!
- int rednibroj=1;
- for(int i=0;i<citanjeStruktura.brojElemenata;i++) {
- cout << citanjeStruktura.rijeci[i].redniBroj << ". " << citanjeStruktura.rijeci[i].rijec << endl;
- }
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement