DilyaraL

2курсНаследованиеList

Mar 14th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.03 KB | None | 0 0
  1. struct node
  2. {
  3. char info;
  4. node* next;
  5. };
  6.  
  7. class List
  8. {
  9. protected: node * head, *marker, *pred;
  10. public:
  11. List();
  12. void Reset();
  13. void Move();
  14. bool EoL();//1 if marker=NULL
  15. void Add(char data);
  16. void Del();
  17. void NewElem(char data);
  18. };
  19. List::List()
  20. {
  21. head = NULL;
  22. marker = NULL;
  23. pred = marker;
  24. }
  25.  
  26. void List::Reset()
  27. {
  28. marker = head;
  29. pred = marker;
  30. }
  31.  
  32. void List::Move()
  33. {
  34. //pred = marker;
  35. marker = marker->next;
  36. }
  37.  
  38. bool List::EoL()
  39. {
  40. return (marker==NULL);
  41. }
  42.  
  43. void List::Add(char data)
  44. {
  45. node* p = new node;
  46. p->info = data;
  47. pred->next = p;
  48. p->next = marker;
  49. }
  50.  
  51. void List::Del()
  52. {
  53. node* p = marker;
  54. Move();
  55. pred->next = marker;
  56. delete p;
  57. }
  58.  
  59. void List::NewElem(char data)
  60. {
  61. marker = new node;//функция
  62. marker->info = data;
  63. marker->next = NULL;
  64. }
  65. struct node3
  66. {
  67. char info;
  68. node3* next;
  69. };
  70.  
  71. class Redoct:public List
  72. {
  73. public:
  74. void creatList(ifstream & f);
  75. Redoct startWord();
  76. bool Begin(char a);
  77. bool End(char a);//маркер у нас на конце слова слова
  78. bool InWord(char a);
  79. bool Same(char *a, int n);
  80. Redoct Copy();// наоборот
  81. bool Palindrom();//
  82. void Perevorot();
  83. void Show();
  84. void Delet();///
  85. Redoct creatArray(char* b, int m);
  86. void L116(char * b, int m, char a);
  87. node* startW;
  88. node* end;
  89. };
  90. void Redoct::creatList(ifstream & f)
  91. {
  92. List();
  93. head = new node;
  94. char data;
  95. node* tail = head;
  96. while (f.get(data))
  97. {
  98. NewElem(data);
  99. tail->next = marker;
  100. tail = marker;
  101. }
  102. Reset();
  103. head=head->next;
  104. Del();
  105. }
  106.  
  107. Redoct Redoct::startWord()
  108. {
  109. marker = pred;// на пробеле до слова
  110. Redoct k;
  111. k.head = new node;
  112. node* tail = k.head;
  113. //k.head->info = marker->info;
  114. Move();
  115. while (marker != NULL && marker->info != ' ')
  116. {
  117. k.marker = new node;
  118. k.marker->info = marker->info;
  119. k.marker->next = NULL;
  120. tail->next = k.marker;
  121. tail = k.marker;
  122. Move();
  123. }
  124. k.end = tail;
  125. k.marker = k.head;
  126. k.head = k.head->next;
  127. startW = k.head;
  128. return k;
  129.  
  130. ///маркер на пробеле после слова
  131. }
  132.  
  133. bool Redoct::Begin(char a)
  134. {
  135. return (head->info == a);
  136. }
  137.  
  138. bool Redoct::End(char a)
  139. {
  140. return (end->info == a);
  141. }
  142.  
  143. bool Redoct::InWord(char a)
  144. {
  145. bool t = false;
  146. marker = head;
  147. while (marker!=NULL&&!t)
  148. {
  149. if (marker->info == a)
  150. t = true;
  151. Move();
  152. }
  153. return t;
  154. }
  155.  
  156. bool Redoct::Same(char * a, int n)///
  157. {
  158. bool t = false;
  159. int i = 0;
  160. while (a[i] == marker->info&&i<n)
  161. {
  162. i++;
  163. Move();
  164. }
  165. if (i == n&&marker->info==' ')
  166. t = true;
  167. return t;
  168. }
  169.  
  170. Redoct Redoct::Copy()
  171. {
  172. Redoct k;
  173. k.head = NULL;
  174. k.marker = NULL;
  175. k.pred = NULL;
  176. Reset();
  177. marker = startW;
  178. while (marker!=NULL&& marker->info != ' ')
  179. {
  180. k.Add(marker->info);
  181. Move();
  182. }
  183. return k;
  184. }
  185.  
  186. bool Redoct::Palindrom()//
  187. {
  188. Redoct k = Copy();//copy слова
  189. node*q = head;
  190. int n = 0, m = 0;
  191. while (q->info != ' ')//узнаем длину слова
  192. {
  193. q = q->next;
  194. n++;
  195. }
  196. marker = head;
  197. for (int i = 0; i < n/2; i++)
  198. {
  199. if (k.head->info == marker->info)
  200. m++;
  201. k.head = k.head->next;
  202. Move();
  203. }
  204. return (m == n/2);
  205. }
  206.  
  207. void Redoct::Perevorot()
  208. {
  209. node *q1, *q2, *q3, *temp = NULL;
  210. Reset();
  211. q1 = head;
  212. if (marker->next->info!=' ')
  213. {
  214. q2 = q1->next;
  215. q3 = q2->next;
  216. while (q3->info != ' ')
  217. {
  218. q1->next = temp;
  219. q2->next = q1;
  220. temp = q1;
  221. q1 = q2;
  222. q2 = q3;
  223. q3 = q3->next;
  224. }
  225. q1->next = temp;
  226. q2->next = q1;
  227. marker = q2;
  228. }
  229. }
  230.  
  231. void Redoct::Show()
  232. {
  233. marker = head;
  234. if (head->next == NULL)
  235. cout << "List is empty" << endl;
  236. else
  237. while (marker != NULL)//&& marker->info != ' '
  238. {
  239. cout << marker->info;
  240. Move();
  241. }
  242. }
  243.  
  244. void Redoct::Delet()////
  245. {
  246. marker = pred;
  247. while (marker!=NULL&&marker->info!=' ')
  248. {
  249. Del();
  250. }
  251. if (marker != NULL)
  252. pred->next = marker;
  253. }
  254.  
  255. Redoct Redoct::creatArray(char * b, int m)
  256. {
  257. Redoct k;
  258. k.head = new node;
  259. node *tail = k.head;
  260. for(int i=0; i<m;i++)
  261. {
  262. k.NewElem(b[i]);
  263. tail->next = k.marker;
  264. tail = k.marker;
  265. }
  266. k.marker = k.head;
  267. k.head = k.head->next;
  268. k.end = tail;
  269. return k;
  270. }
  271.  
  272. void Redoct::L116(char * b, int m, char a)
  273. {
  274. Reset();
  275. Redoct K;
  276. node*temp, *current;
  277. startW = head;
  278. while (marker->next != NULL)
  279. {
  280. Redoct head1 = creatArray(b, m);///создаем список из слова, которое нужно вставить
  281.  
  282. K=startWord();
  283. current = marker;
  284. if (K.head != NULL)
  285. {
  286. temp = pred->next;
  287. if (K.Begin(a))
  288. {
  289. pred->next = head1.head;//перед началом ставим новое слово
  290. head1.end->next = temp;
  291. }
  292. pred = marker;
  293. }
  294. }
  295. }
  296.  
  297. #include "RedoctList.h"
  298. #include <iostream>
  299. #include <fstream>
  300.  
  301. using namespace std;
  302.  
  303. int main()
  304. {
  305. Redoct l;
  306. ifstream f("Text.txt");
  307. l.creatList(f);
  308. char b[] = {"VgggO "};
  309. int m = sizeof(b)-1;
  310. char y = 'y';
  311. l.L116(b, m, y);
  312. l.Show();
  313. system("pause");
  314. return 0;
  315. }
  316. ygkt rvgy egk yfuf dk
  317. VgggO ygkt rvgy egk VgggO yfuf dk
Advertisement
Add Comment
Please, Sign In to add comment