Advertisement
Guest User

Untitled

a guest
May 24th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <sstream>
  5. #include <cstdlib>
  6.  
  7. using namespace std;
  8.  
  9. struct element
  10. {
  11. string data;
  12. element* next;
  13. element* prev;
  14. };
  15.  
  16. struct queues
  17. {
  18. element* head;
  19. element* tail;
  20. };
  21.  
  22. struct lists
  23. {
  24. element* head;
  25. element* tail;
  26. int el_num;
  27. };
  28.  
  29. struct stacks
  30. {
  31. string data;
  32. stacks* next;
  33. };
  34.  
  35. void push(stacks* &st, string new_data); //dodawanie elementu do stosu
  36. void pop(stacks* &st); //usuwanie elementu ze stosu
  37. string import(stacks* st);
  38.  
  39. lists create_empty_list();
  40. element* create_element(string new_data);
  41. void add_tail(string new_data, lists &ls);
  42. void wyswietl_liste(lists ls);
  43.  
  44. queues create_queue();
  45. void enqueue(queues &qs, string new_data);
  46.  
  47. bool search_pattern(string pattern, string text, int q,int &amount);
  48.  
  49. void import_data(string path, lists &ls);
  50.  
  51. void zadanie1(lists &ls);
  52. void zadanie2(lists ls,queues &qs);
  53. void zadanie3(queues qs);
  54.  
  55. int main()
  56. {
  57. lists ls = create_empty_list();
  58. queues qs = create_queue();
  59. zadanie1(ls);
  60. zadanie2(ls,qs);
  61. zadanie3(qs);
  62. return 0;
  63. }
  64.  
  65. bool search_pattern(string pat, string txt, int q,int &amount)
  66. {
  67. int M = pat.length();
  68. int N = txt.length();
  69. bool counter=0;
  70. amount=0;
  71. int i, j;
  72. int d=256;
  73. int p = 0;
  74. int t = 0;
  75. int h = 1;
  76.  
  77. for (i = 0; i < M - 1; i++)
  78. h = (h * d) % q;
  79.  
  80. for (i = 0; i < M; i++)
  81. {
  82. p = (d * p + pat[i]) % q;
  83. t = (d * t + txt[i]) % q;
  84. }
  85.  
  86.  
  87. for (i = 0; i <= N - M; i++)
  88. {
  89.  
  90. if ( p == t )
  91. {
  92. for (j = 0; j < M; j++)
  93. {
  94. if (txt[i+j] != pat[j])
  95. break;
  96. }
  97.  
  98. if (j == M)
  99. {
  100. counter=1;
  101. amount++;
  102. }
  103. }
  104.  
  105. if ( i < N-M )
  106. {
  107. t = (d*(t - txt[i]*h) + txt[i+M])%q;
  108.  
  109. if (t < 0)
  110. t = (t + q);
  111. }
  112. }
  113. return counter;
  114. }
  115.  
  116. lists create_empty_list()
  117. {
  118. lists ls;
  119. ls.head = nullptr;
  120. ls.tail = nullptr;
  121. ls.el_num=0;
  122. return ls;
  123. }
  124.  
  125. element* create_element(string new_data)
  126. {
  127. element* temp = new element;
  128. temp->data=new_data;
  129. temp->next=nullptr;
  130. temp->prev=nullptr;
  131. return temp;
  132. }
  133.  
  134. void import_data(string path, lists &ls)
  135. {
  136. stacks* st = nullptr;
  137. ifstream file;
  138. string slowo, zdanie;
  139. file.open(path);
  140. char temp;
  141. while(file>>slowo)
  142. {
  143. while(1)
  144. {
  145. temp=' ';
  146. if(slowo[slowo.size()-1] == '?' || slowo[slowo.size()-1] == '!' || slowo[slowo.size()-1] == '.')
  147. {
  148. temp = slowo[slowo.size()-1];
  149. slowo.pop_back();
  150. push(st, slowo);
  151. break;
  152. }
  153. push(st,slowo);
  154. file>>slowo;
  155. if(file.eof()) break;
  156. }
  157.  
  158. ostringstream ss;
  159. while(st!=nullptr)
  160. {
  161. ss<<import(st)<<" ";
  162. pop(st);
  163. }
  164. zdanie=ss.str();
  165. zdanie.pop_back();
  166. zdanie.push_back(temp);
  167. ss.str("");
  168. add_tail(zdanie,ls);
  169. }
  170. file.close();
  171. }
  172.  
  173. void push(stacks* &st, string new_data)
  174. {
  175. stacks* dodawany_element=new stacks;
  176. dodawany_element->data=new_data;
  177. dodawany_element->next=st;
  178. st=dodawany_element;
  179. }
  180.  
  181. void pop(stacks* &st)
  182. {
  183. stacks* temp = st;
  184. st=st->next;
  185. delete temp;
  186. }
  187.  
  188. string import(stacks* st)
  189. {
  190. string data_to_return=st->data;
  191. return data_to_return;
  192. }
  193.  
  194. void add_tail(string new_data, lists &ls)
  195. {
  196. element* n_e = create_element(new_data);
  197. if(ls.el_num==0)
  198. ls.head=n_e;
  199. else
  200. ls.tail->next=n_e;
  201. n_e->prev=ls.tail;
  202. ls.tail=n_e;
  203. ls.el_num++;
  204. }
  205.  
  206. void wyswietl_liste(lists ls)
  207. {
  208. element* temp=ls.head;
  209. do{
  210. cout<<temp->data<<endl;
  211. temp=temp->next;
  212. }while(temp!=nullptr);
  213. }
  214.  
  215. queues create_queue()
  216. {
  217. queues new_queue;
  218. new_queue.head=nullptr;
  219. new_queue.tail=nullptr;
  220. return new_queue;
  221. }
  222.  
  223. void enqueue(queues &qs,string new_data)
  224. {
  225. element* new_el=new element;
  226. new_el->data=new_data;
  227. new_el->next=nullptr;
  228. if(qs.tail!=nullptr)qs.tail->next=new_el;
  229. qs.tail=new_el;
  230. if(qs.head==nullptr)qs.head=new_el;
  231. }
  232.  
  233. void zadanie1(lists &ls)
  234. {
  235. cout<<"Zadanie 1"<<endl<<endl;
  236. import_data("inversed.txt",ls);
  237. wyswietl_liste(ls);
  238. cout<<"--------------------------------------------------------"<<endl;
  239. }
  240.  
  241. void show_queue(queues qs)
  242. {
  243. element* temp=qs.head;
  244. do
  245. {
  246. cout<<temp->data<<endl;
  247. temp=temp->next;
  248. }while(temp!=nullptr);
  249. }
  250. void zadanie2(lists ls,queues &qs)
  251. {
  252. element* temp=ls.head;
  253. int q=101,z;
  254. cout<<endl<<"Zadanie 2"<<endl<<endl;
  255. do
  256. {
  257. if (((search_pattern("promotion", temp->data,q,z))==1) || ((search_pattern("discount", temp->data,q,z))==1) || ((search_pattern("sale", temp->data,q,z))==1) || ((search_pattern("offer", temp->data,q,z))==1))
  258. {
  259. enqueue(qs, temp->data);
  260. }
  261. temp=temp->next;
  262. }while(temp!=nullptr);
  263.  
  264. show_queue(qs);
  265.  
  266. cout<<"--------------------------------------------------------"<<endl;
  267. }
  268. void zadanie3(queues qs)
  269. {
  270. element* temp=qs.head;
  271. int q=101;
  272. int z,x,c,v,y;
  273. cout<<endl<<"Zadanie 3"<<endl<<endl;
  274. do{
  275. if (((search_pattern("unique offer", temp->data,q,z))==1) || ((search_pattern("mega discounts", temp->data,q,x))==1) || ((search_pattern("super promotion", temp->data,q,c))==1) || ((search_pattern("low prices", temp->data,q,v))==1) || ((search_pattern("great sale", temp->data,q,y))==1))
  276. cout<<temp->data<<endl;
  277. temp=temp->next;
  278. }while(temp!=nullptr);
  279. cout<<"unique offer: "<<z<<endl;
  280. cout<<"mega discounts: "<<x<<endl;
  281. cout<<"super promotion: "<<c<<endl;
  282. cout<<"low prices: "<<v<<endl;
  283. cout<<"great sale: "<<y<<endl;
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement