Advertisement
Guest User

Untitled

a guest
Oct 16th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. struct node
  5. {
  6. char data;
  7. node* next;
  8. };
  9. class List
  10. { public:
  11. node* top,*marker,*prev,*tail;
  12. List();
  13. void Reset();
  14. void Move();
  15. bool EoList();
  16. void AddBeforeMarker(char x);
  17. void push_back (char x);
  18. void push_front (char x);
  19. void MarkerInTheEnd ();
  20. void Del();
  21. bool Empty();
  22. };
  23.  
  24.  
  25. class text : public List
  26. {
  27. public:
  28. List MyList;
  29. List Word;
  30. node * LocalTop;
  31.  
  32.  
  33. void createlist();
  34. void look();
  35. bool litter1(char x);
  36. bool litter2(char x);
  37. bool litter3(char x);
  38. bool word(char * x);
  39. bool poli();
  40. void povorot();
  41. void write();
  42. void del();
  43. };
  44.  
  45. List::List()
  46. {
  47. top=marker=tail=prev=NULL;
  48.  
  49. }
  50. bool List::Empty () {
  51. return top==NULL;
  52. }
  53. void List::Reset()
  54. {
  55. marker = top;
  56. prev=top;
  57. }
  58. void List::Move()
  59. {
  60. marker=marker->next;
  61. }
  62. bool List::EoList()
  63. {
  64. return marker==NULL;
  65. }
  66. void List::AddBeforeMarker(char x)
  67. {
  68. node * t = new node;
  69. t->next=marker;
  70. t->data=x;
  71. if (marker!=top)
  72. prev->next=t;
  73. else
  74. top=prev=t;
  75.  
  76. }
  77.  
  78.  
  79. void List::Del()
  80. { if (marker!=tail){
  81. if (top==marker){
  82. top=top->next;
  83. delete marker;
  84. marker=top; prev=top;
  85. }
  86. else {
  87.  
  88. prev->next=marker->next;
  89. delete marker;
  90. marker=marker->next;
  91. }
  92. }
  93. else
  94. {
  95. if (top==marker){
  96. delete marker;
  97. marker=NULL; prev=NULL;
  98. }
  99. else{
  100. prev->next=NULL;
  101. delete marker;
  102. tail=marker=prev;
  103. node * run = top;
  104. while (run->next!=tail) run=run->next;
  105. prev=run;
  106. }
  107. }
  108. }
  109. void List::push_back (char x)
  110. {
  111. if (top==NULL)
  112. { top=new node;
  113. top->next=NULL;
  114. top->data=x;
  115. tail=top;
  116. }
  117. else
  118. { node * t= new node;
  119. t->next=NULL;
  120. t->data=x;
  121. tail->next=t;
  122. tail=t;
  123. }
  124. }
  125. void List::push_front (char x) {
  126.  
  127. if (top==NULL)
  128. { top=new node;
  129. top->next=NULL;
  130. top->data=x;
  131. tail=top;
  132. }
  133. else
  134. { node *r=marker, *y=prev;
  135. Reset();
  136. AddBeforeMarker(x);
  137. if (r!=top->next)
  138. marker=r; y=prev;
  139. }
  140. }
  141.  
  142. void List::MarkerInTheEnd ()
  143. { node * t = top;
  144. marker=tail;
  145. while (t->next!=marker) t=t->next;
  146. prev=t;
  147. }
  148.  
  149.  
  150. void text::createlist()
  151. {
  152. string str;
  153. getline (cin,str);
  154. int i=0;
  155. while (str.size()>i)
  156. { MyList.push_back(str[i]);
  157. i++;}
  158. MyList.Reset();
  159. }
  160. void text::look(){
  161.  
  162. if (!Word.Empty())
  163. { if (MyList.EoList()) LocalTop=0;
  164. Word.Reset();
  165. while (!Word.Empty()) Word.Del();
  166.  
  167. }
  168. LocalTop=MyList.marker;
  169. while (!MyList.EoList() && MyList.marker->data != ' ')
  170. {
  171. Word.push_back ( MyList.marker->data);
  172. MyList.Move();
  173. }
  174. Word.Reset();
  175. }
  176.  
  177. bool text::litter1(char x)
  178. {return Word.top->data==x;
  179. }
  180. bool text::litter2(char x)
  181. { return Word.tail->data==x;
  182.  
  183. }
  184. bool text::litter3(char x)
  185. { Word.Reset();
  186. do {
  187. if ( Word.marker->data==x)
  188. return 1;
  189. Word.Move();
  190. }
  191. while (!Word.EoList());
  192. return 0;
  193. }
  194. bool text::word(char * x)
  195. {Word.Reset();
  196. int i=0;
  197. do
  198. { if (x[i]!=Word.marker->data)
  199. return 0;
  200. i++;
  201. Word.Move();
  202.  
  203. }
  204. while ( x[i] !=0 && !Word.EoList());
  205. if (x[i] ==0 && !Word.EoList()) return 1;
  206.  
  207.  
  208. }
  209.  
  210. bool text::poli(){
  211. List Stack;
  212. Word.Reset();
  213. do
  214. {
  215. Stack.push_front(Word.marker->data) ;
  216. Word.Move();
  217. }
  218. while (Word.marker!=NULL);
  219. Stack.Reset();
  220. Word.Reset();
  221. while ( Word.marker->data==Stack.marker->data && Word.marker!=NULL && Stack.marker!=NULL)
  222. {
  223. Word.Move();
  224. Stack.Move();
  225. }
  226. if (Word.marker==NULL && Stack.marker==NULL ) return true;
  227. else return false;
  228.  
  229.  
  230. }
  231. void text::povorot()
  232. {
  233. List Stack;
  234. Word.Reset();
  235. do
  236. {
  237. Stack.push_front(Word.marker->data);
  238. Word.Move();
  239. }
  240. while (!Word.EoList());
  241. Word.Reset();
  242. Stack.Reset();
  243. node * t=LocalTop;
  244. do
  245. {
  246. Word.marker->data= Stack.marker->data;
  247. t->data= Stack.marker->data;
  248. Word.Move();
  249. Stack.Move();
  250. t=t->next;
  251. }
  252. while (!Word.EoList());
  253.  
  254. }
  255.  
  256. void text::write()
  257. {
  258. MyList.Reset();
  259.  
  260. while (!MyList.EoList())
  261.  
  262. {
  263. cout<<MyList.marker->data;
  264. MyList.Move();
  265. }
  266.  
  267. }
  268. void text::del() {
  269. MyList.Reset();
  270. while (MyList.marker->next==LocalTop) MyList.Move();
  271. node * NewMark=MyList.marker;
  272. MyList.marker=LocalTop;
  273. while (!MyList.EoList() && MyList.marker->data!=' ')
  274. {MyList.Move();
  275. delete MyList.prev;
  276. }
  277. if (!MyList.EoList())
  278. {
  279. NewMark=MyList.marker->next;
  280. delete MyList.marker;
  281. MyList.marker=NewMark;
  282. }
  283. else
  284. NewMark->next==NULL;
  285. }
  286.  
  287. int main ()
  288. {text NewText;
  289. NewText.createlist();
  290.  
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement