Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <string.h>
- #include <ctype.h>
- #define najw_slowo 4096
- typedef struct Znaki
- {
- unsigned char* wyraz;
- int ilosc;
- struct Znaki* next;
- } Znaki;
- int Statystyka[najw_slowo];
- Znaki* pocz[najw_slowo];
- bool znak_bialy(char c)
- {
- if (c == '\n' || c == ' ' || c == ',' || c == '.' || c == ';' || c == ':' || c == '(' || c == ')' || c == '\t' || c == '\0')
- return true;
- return false;
- }
- int main(int argumenty, char** agrumentyV)
- {
- //PROGRAM BYL TESTOWANY NA PRZYKLADOWYM PLIKU ZAMIESZCZONYM NA PLATFORMIE text3.txt KTORY NIE ZAWIERA POLSKICH ZNAKOW;;;
- //
- bool file = false; bool stats = false;
- bool pokaz_statystyke = false; bool plik_wynikowy = false;
- bool end = false; char c = 0;
- bool stworzony_plik = false; bool przedstawienie_programu = false;
- bool operacje = true;
- while (true)
- {
- if (!przedstawienie_programu)
- {
- przedstawienie_programu = true;
- printf("=================================================================\n");
- printf("Program przedstawia statystyke wyrazow zawartych w pliku txt.\n");
- printf("Dostepne operacje na pliku:\n");
- printf("r-wczytanie pliku txt\n");
- printf("s-stworzenie statystyki wyrazow zawartych w pliku txt\n");
- printf("p-wydrukuj na konsole N najdluzszych znakow (N <= 12)\n");
- printf("w-zapis raportu do pliky\n");
- printf("q-zakonczenie pracy i zakmniecie programu\n");
- }
- else if (operacje)
- printf("Wybierz operacje ktora chcesz wykonac:");
- operacje=false;
- c=getchar();
- {
- char zm=c;
- while (c!='\r' && c != '\n')
- c=getchar();
- c=zm;
- }
- switch (c)
- {
- case 'r': file=true;
- break;
- case 's': stats=true;
- break;
- case 'p': pokaz_statystyke=true;
- break;
- case 'w': plik_wynikowy=true;
- break;
- case 'q': end=true;
- break;
- }
- if (end)
- break;
- if (file)
- {
- file=false;
- operacje=true;
- if (stworzony_plik)
- {
- stworzony_plik = false;
- }
- printf("Podaj nazwe pliku tekstowego(|z rozszerzeniem .txt|):\n ");
- char otwarty_plik[najw_slowo];
- scanf("%s", otwarty_plik);
- FILE* file_ = fopen(otwarty_plik, "r");
- if (!file_)
- {
- printf("Wystpil blad podczas proby otwarcia pliku %s\n", otwarty_plik);
- continue;
- }
- unsigned char ws;
- int line = 0;
- while (ws = fgetc(file_))
- {
- if (!znak_bialy(ws))
- {
- otwarty_plik[line] = ws;
- ++line;
- if (line >= najw_slowo)
- {
- printf("Blad! Maksymalna dlugosc slowa to %d\n", najw_slowo);
- fclose(file_);
- break;
- }
- }
- else
- {
- char* point = (char*)malloc(line +1);
- for (int i = 0; i < line; ++i)
- point[i] = otwarty_plik[i];
- point[line] = '\0';
- ++Statystyka[line];
- Znaki** wsk_char = &pocz[line];
- while (*wsk_char)
- {
- if ((*wsk_char)->wyraz) break;
- if(!strcmp(point, (*wsk_char)->wyraz));
- wsk_char = &(*wsk_char)->next;
- }
- line = 0;
- if (*wsk_char)
- {
- ++(*wsk_char)->ilosc;
- free(point);
- }
- else
- {
- *wsk_char = malloc(sizeof(Znaki));
- (*wsk_char)->wyraz = point;
- (*wsk_char)->ilosc = 1;
- (*wsk_char)->next = NULL;
- }
- }
- if (ws==255) break;
- }
- fclose(file_);
- stworzony_plik = true;
- }
- else if (stats)
- {
- stats = false;
- operacje = true;
- if (!stworzony_plik)
- printf("Blad! Najezy najpierw wczytac plik txt!\n");
- else
- {
- int max_il = 0;
- for (unsigned i = 0; i < najw_slowo; ++i)
- {
- if (max_il < Statystyka[i])
- max_il = Statystyka[i];
- }
- if (!max_il)
- {
- printf("Brak slow\n"); continue;
- }
- while (max_il > 0)
- {
- for (unsigned i = 0; i < najw_slowo; ++i)
- {
- if (Statystyka[i] == max_il)
- printf("Znaleziono %d slow o dlugosci %d\n", Statystyka[i], i);
- }
- --max_il;
- }}}
- else if (pokaz_statystyke)
- {
- pokaz_statystyke = false;
- operacje = true;
- if (!stworzony_plik)
- printf("Blad! Najezy najpierw wczytac plik txt!\n");
- else
- {
- int n, m;
- printf("Ile najdluzszych slow chcesz wyszukac?: ");
- scanf("%d", &n);
- m=n;
- int i = najw_slowo;
- while (--i)
- {
- if (n <= 0) break;
- if (pocz[i])
- {
- Znaki* tmp = pocz[i];
- while (tmp)
- {
- --n;
- printf("%s\n", tmp->wyraz);
- tmp = tmp->next;
- }}}
- if (n==m)
- printf("Brak szukanych wyrazow\n");
- }}
- else if (plik_wynikowy)
- {
- plik_wynikowy = false;
- operacje = true;
- if (!stworzony_plik)
- printf("Blad! Najezy najpierw wczytac plik txt!\n");
- else
- {
- printf("Wpisz nazwe pliku wynikowego zawierajcego raport o wyrazach: ");
- char otwarty_plik[najw_slowo];
- scanf("%s", otwarty_plik);
- FILE* file_ = fopen(otwarty_plik, "w+");
- if (!file_)
- {
- printf("Blad otwarcia pliku! %s\n", otwarty_plik); continue;
- }
- int max_il = 0;
- for (unsigned i=0; i < najw_slowo; ++i)
- {
- if (max_il < Statystyka[i])
- max_il = Statystyka[i];
- }
- if (!max_il)
- {
- fprintf(file_, "Brak slow\n"); continue;
- }
- while (max_il >0){
- for (unsigned i=0; i<najw_slowo; ++i){
- if (Statystyka[i]==max_il)
- fprintf(file_, "Znaleziono %d wyrazow o nastepujacej dlugosci: %d\n", Statystyka[i], i);
- } --max_il;
- }
- fclose(file_);
- }}};
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement