Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6. #define najw_slowo 4096
  7. typedef struct Znaki
  8. {
  9. unsigned char* wyraz;
  10. int ilosc;
  11. struct Znaki* next;
  12. } Znaki;
  13.  
  14. int Statystyka[najw_slowo];
  15. Znaki* pocz[najw_slowo];
  16.  
  17. bool znak_bialy(char c)
  18. {
  19. if (c == '\n' || c == ' ' || c == ',' || c == '.' || c == ';' || c == ':' || c == '(' || c == ')' || c == '\t' || c == '\0')
  20. return true;
  21. return false;
  22.  
  23. }
  24.  
  25. int main(int argumenty, char** agrumentyV)
  26. {
  27. //PROGRAM BYL TESTOWANY NA PRZYKLADOWYM PLIKU ZAMIESZCZONYM NA PLATFORMIE text3.txt KTORY NIE ZAWIERA POLSKICH ZNAKOW;;;
  28. //
  29. bool file = false; bool stats = false;
  30. bool pokaz_statystyke = false; bool plik_wynikowy = false;
  31. bool end = false; char c = 0;
  32. bool stworzony_plik = false; bool przedstawienie_programu = false;
  33. bool operacje = true;
  34. while (true)
  35. {
  36.  
  37. if (!przedstawienie_programu)
  38. {
  39. przedstawienie_programu = true;
  40. printf("=================================================================\n");
  41. printf("Program przedstawia statystyke wyrazow zawartych w pliku txt.\n");
  42. printf("Dostepne operacje na pliku:\n");
  43. printf("r-wczytanie pliku txt\n");
  44. printf("s-stworzenie statystyki wyrazow zawartych w pliku txt\n");
  45. printf("p-wydrukuj na konsole N najdluzszych znakow (N <= 12)\n");
  46. printf("w-zapis raportu do pliky\n");
  47. printf("q-zakonczenie pracy i zakmniecie programu\n");
  48. }
  49. else if (operacje)
  50. printf("Wybierz operacje ktora chcesz wykonac:");
  51. operacje=false;
  52. c=getchar();
  53. {
  54. char zm=c;
  55. while (c!='\r' && c != '\n')
  56. c=getchar();
  57. c=zm;
  58. }
  59.  
  60. switch (c)
  61. {
  62. case 'r': file=true;
  63. break;
  64. case 's': stats=true;
  65. break;
  66. case 'p': pokaz_statystyke=true;
  67. break;
  68. case 'w': plik_wynikowy=true;
  69. break;
  70. case 'q': end=true;
  71. break;
  72. }
  73. if (end)
  74. break;
  75.  
  76. if (file)
  77. {
  78. file=false;
  79. operacje=true;
  80. if (stworzony_plik)
  81. {
  82.  
  83. stworzony_plik = false;
  84. }
  85.  
  86. printf("Podaj nazwe pliku tekstowego(|z rozszerzeniem .txt|):\n ");
  87. char otwarty_plik[najw_slowo];
  88. scanf("%s", otwarty_plik);
  89.  
  90.  
  91. FILE* file_ = fopen(otwarty_plik, "r");
  92. if (!file_)
  93. {
  94. printf("Wystpil blad podczas proby otwarcia pliku %s\n", otwarty_plik);
  95. continue;
  96. }
  97. unsigned char ws;
  98. int line = 0;
  99. while (ws = fgetc(file_))
  100. {
  101. if (!znak_bialy(ws))
  102. {
  103. otwarty_plik[line] = ws;
  104. ++line;
  105. if (line >= najw_slowo)
  106. {
  107. printf("Blad! Maksymalna dlugosc slowa to %d\n", najw_slowo);
  108. fclose(file_);
  109. break;
  110. }
  111. }
  112. else
  113. {
  114. char* point = (char*)malloc(line +1);
  115. for (int i = 0; i < line; ++i)
  116. point[i] = otwarty_plik[i];
  117. point[line] = '\0';
  118. ++Statystyka[line];
  119.  
  120. Znaki** wsk_char = &pocz[line];
  121.  
  122. while (*wsk_char)
  123. {
  124. if ((*wsk_char)->wyraz) break;
  125. if(!strcmp(point, (*wsk_char)->wyraz));
  126. wsk_char = &(*wsk_char)->next;
  127. }
  128.  
  129. line = 0;
  130. if (*wsk_char)
  131. {
  132. ++(*wsk_char)->ilosc;
  133. free(point);
  134. }
  135. else
  136. {
  137. *wsk_char = malloc(sizeof(Znaki));
  138. (*wsk_char)->wyraz = point;
  139. (*wsk_char)->ilosc = 1;
  140. (*wsk_char)->next = NULL;
  141. }
  142. }
  143.  
  144. if (ws==255) break;
  145. }
  146. fclose(file_);
  147. stworzony_plik = true;
  148. }
  149. else if (stats)
  150. {
  151. stats = false;
  152. operacje = true;
  153. if (!stworzony_plik)
  154. printf("Blad! Najezy najpierw wczytac plik txt!\n");
  155. else
  156. {
  157. int max_il = 0;
  158. for (unsigned i = 0; i < najw_slowo; ++i)
  159. {
  160. if (max_il < Statystyka[i])
  161. max_il = Statystyka[i];
  162. }
  163.  
  164. if (!max_il)
  165. {
  166. printf("Brak slow\n"); continue;
  167. }
  168.  
  169. while (max_il > 0)
  170. {
  171. for (unsigned i = 0; i < najw_slowo; ++i)
  172. {
  173. if (Statystyka[i] == max_il)
  174. printf("Znaleziono %d slow o dlugosci %d\n", Statystyka[i], i);
  175. }
  176. --max_il;
  177. }}}
  178. else if (pokaz_statystyke)
  179. {
  180. pokaz_statystyke = false;
  181. operacje = true;
  182. if (!stworzony_plik)
  183. printf("Blad! Najezy najpierw wczytac plik txt!\n");
  184. else
  185. {
  186. int n, m;
  187. printf("Ile najdluzszych slow chcesz wyszukac?: ");
  188. scanf("%d", &n);
  189. m=n;
  190. int i = najw_slowo;
  191.  
  192. while (--i)
  193. {
  194. if (n <= 0) break;
  195.  
  196. if (pocz[i])
  197. {
  198. Znaki* tmp = pocz[i];
  199. while (tmp)
  200. {
  201. --n;
  202. printf("%s\n", tmp->wyraz);
  203. tmp = tmp->next;
  204. }}}
  205. if (n==m)
  206. printf("Brak szukanych wyrazow\n");
  207. }}
  208. else if (plik_wynikowy)
  209. {
  210. plik_wynikowy = false;
  211. operacje = true;
  212. if (!stworzony_plik)
  213. printf("Blad! Najezy najpierw wczytac plik txt!\n");
  214. else
  215. {
  216.  
  217. printf("Wpisz nazwe pliku wynikowego zawierajcego raport o wyrazach: ");
  218. char otwarty_plik[najw_slowo];
  219. scanf("%s", otwarty_plik);
  220.  
  221.  
  222. FILE* file_ = fopen(otwarty_plik, "w+");
  223. if (!file_)
  224. {
  225. printf("Blad otwarcia pliku! %s\n", otwarty_plik); continue;
  226. }
  227.  
  228. int max_il = 0;
  229.  
  230. for (unsigned i=0; i < najw_slowo; ++i)
  231. {
  232. if (max_il < Statystyka[i])
  233. max_il = Statystyka[i];
  234. }
  235.  
  236. if (!max_il)
  237. {
  238. fprintf(file_, "Brak slow\n"); continue;
  239. }
  240.  
  241. while (max_il >0){
  242. for (unsigned i=0; i<najw_slowo; ++i){
  243. if (Statystyka[i]==max_il)
  244. fprintf(file_, "Znaleziono %d wyrazow o nastepujacej dlugosci: %d\n", Statystyka[i], i);
  245. } --max_il;
  246. }
  247.  
  248. fclose(file_);
  249. }}};
  250.  
  251.  
  252. return 0;
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement