Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. //////////////////////HEADER
  2. #pragma once
  3. #include <iostream>
  4. #include <string.h>
  5. using namespace std;
  6. class Element
  7. {
  8. int data;
  9. char symb;
  10. Element * straight;
  11. Element * previous;
  12. Element * down;
  13. public:
  14. Element(int a, char b) { symb = b; data = a; straight = 0; down = 0; }
  15. friend class List;
  16. friend ostream & operator << (ostream&s, List &a);
  17. };
  18. class List
  19. {
  20. Element *Ver;
  21. public:
  22. List() { Ver = 0; }
  23. void push(char**,int);
  24. void Dekor(char*,List,char*,int len);
  25. void Kodir(List a, char * mas, char *,int&);
  26. friend ostream & operator << (ostream&s, List &a);
  27. };
  28. char ** SORT(char* str, int &m);
  29.  
  30.  
  31. ////////////////////////////////////////////////////// MAS
  32. #include "Header.h"
  33.  
  34. char ** SORT(char* str, int &m)
  35. {
  36. int i, n = strlen(str);
  37. char ** mas = new char *[2];
  38. for (int i = 0; i < 2; i++)
  39. mas[i] = new char[n];
  40. for (int i = 0; i < n; i++)
  41. mas[1][i] = 49;
  42. for (; *str != 0; str++)
  43. {
  44. for (i = 0; i < n && mas[0][i] != *str; i++);
  45. if (i == n)
  46. {
  47. mas[0][m] = *str;
  48. m++;
  49. }
  50. else
  51. mas[1][i]++;
  52. }
  53.  
  54. int t = 0;
  55. for (int i = 0; i < m; i++)
  56. {
  57. int save, max = 0;
  58. t = i;
  59. for (; t < m; t++)
  60. {
  61. if (mas[1][t] > max)
  62. {
  63. max = mas[1][t];
  64. save = t;
  65. }
  66. }
  67. max = mas[0][i]; mas[0][i] = mas[0][save]; mas[0][save] = max;
  68. max = mas[1][i]; mas[1][i] = mas[1][save]; mas[1][save] = max;
  69. }
  70.  
  71. mas[0][m] = '\0';
  72. mas[1][m] = '\0';
  73. return mas;
  74. }
  75.  
  76. ///////////////////////////////////////////////////////////SPISOK
  77. #include "Header.h"
  78. void List::push(char** b, int m)
  79. {
  80. Element *pver;
  81. Element *pdown;
  82. int a = b[1][m - 1] - 48;
  83. for (int i = m - 1; i >= 0; i--)
  84. {
  85. if (Ver != 0)
  86. {
  87. a += b[1][i] - 48;
  88. pver = new Element(1, a);
  89. pdown = new Element(0, b[0][i]);
  90. Ver->previous = pver;
  91. pver->straight = Ver;
  92. pdown->previous = pver;
  93. pver->down = pdown;
  94. Ver = pver;
  95. }
  96. else
  97. {
  98. pver = new Element(1, b[0][i]);
  99. Ver = pver;
  100. Ver->straight = 0;
  101. Ver->down = 0;
  102. }
  103. }
  104. }
  105.  
  106. void List::Kodir(List a, char * mas, char *mas1, int &t)
  107. {
  108. Element * ptr = a.Ver;
  109. int data1;
  110. t = 0;
  111. for (int i = 0; i < strlen(mas1); i++)
  112. {
  113. ptr = a.Ver;
  114. while (ptr->straight != 0)
  115. {
  116. if (ptr->down->symb != mas1[i] && ptr->straight->symb != mas1[i])
  117. ptr = ptr->straight;
  118. else
  119. {
  120. if (ptr->down->symb == mas1[i])
  121. data1 = ptr->down->data;
  122. else
  123. data1 = ptr->straight->data;
  124.  
  125. ptr = ptr->down;
  126. while (ptr->previous->previous != 0)
  127. {
  128. mas[t] = ptr->previous->data + 48;
  129. t++;
  130. ptr = ptr->previous;
  131. }
  132. mas[t] = data1 + 48;
  133. t++;
  134. break;
  135. }
  136. }
  137. }
  138. }
  139.  
  140. void List::Dekor(char* mas, List a, char*str, int len)
  141. {
  142. Element*ptr = a.Ver;
  143. int t = 0;
  144. for (int i = 0; i < len; i++)
  145. {
  146. if (0 == mas[i] - 48)
  147. ptr = ptr->down;
  148. else
  149. ptr = ptr->straight;
  150. if (ptr->straight == 0)
  151. {
  152. str[t] = ptr->symb;
  153. t++;
  154. ptr = a.Ver;
  155. }
  156. }
  157. str[t] = '\0';
  158. }
  159.  
  160. ostream & operator << (ostream&s, List &a)
  161. {
  162. Element *ptr = a.Ver, *ptrsave = ptr;
  163. int data;
  164. char symb;
  165. while (ptrsave->straight != 0)
  166. {
  167. ptr = ptrsave->down;
  168. data = ptr->data;
  169. symb = ptr->symb;
  170. while (ptr->previous->previous != 0)
  171. {
  172. ptr = ptr->previous;
  173. s << ptr->data;
  174. }
  175. s << data << " - " << symb << endl;
  176. ptrsave = ptrsave->straight;
  177. }
  178. ptr = ptrsave;
  179. while (ptr->previous != 0)
  180. {
  181. s << ptr->data;
  182. ptr = ptr->previous;
  183. }
  184. s << " - " << ptrsave->symb << endl;
  185. return s;
  186. }
  187. //////////////////////////////////////////////////////////// main
  188.  
  189.  
  190. #include "Header.h"
  191.  
  192. void main()
  193. {
  194. const int n = 100000;
  195. int m = 0;
  196. char mas[n];
  197. cin >> mas;
  198. char ** mas1 = SORT(mas, m);
  199.  
  200. cout << endl << endl;
  201. for (int i = 0; i < m; i++)
  202. cout << "[" << mas1[0][i] << "]";
  203. cout << endl;
  204. for (int i = 0; i < m; i++)
  205. cout << "[" << mas1[1][i] << "]";
  206. cout << endl << endl;
  207.  
  208. List r;
  209. r.push(mas1, m);
  210. cout << r;
  211. cout << endl << endl;
  212.  
  213. int len;
  214. char mas2[n];
  215. r.Kodir(r, mas2, mas, len);
  216. for (int i = 0; i < len; i++)
  217. cout << mas2[i];
  218. cout << endl << endl;
  219. char result[n];
  220. r.Dekor(mas2, r, result, len);
  221. cout << result << endl << endl;
  222.  
  223. system("pause");
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement