Advertisement
Guest User

laba5.2

a guest
Feb 17th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include<algorithm>
  4. #include <fstream>
  5.  
  6.  
  7. using namespace std;
  8.  
  9.  
  10.  
  11. class Manip_tor {};
  12. constexpr Manip_tor myManipulator;
  13.  
  14. struct toggled_ostream
  15. {
  16. std::ostream& os;
  17. };
  18.  
  19. inline toggled_ostream operator << (std::ostream& os, Manip_tor)
  20. {
  21. return { os };
  22. }
  23.  
  24. template <typename T>
  25. std::ostream& operator << (toggled_ostream tos, const T& v)
  26. {
  27. return tos.os << v;
  28. }
  29.  
  30. std::ostream& operator << (toggled_ostream tos, char v)
  31. {
  32. cout << "My_manipulator";
  33. return tos.os << v;
  34. }
  35.  
  36. struct Node
  37. {
  38. char data; // Данные.
  39. Node* Next, * Prev; // Указатели на следующий и предыдущий элементы.
  40. };
  41.  
  42. class StackList {
  43. protected:
  44. long int stackSize = 0;
  45. vector<char> stack;
  46. Node* Head, * Tail;
  47.  
  48. // добавление элемента в список
  49. void Add(char data)
  50. {
  51. Node* temp = new Node; // Создаем новый элемент.
  52. temp->Next = temp->Prev = NULL; // Обнуляем его указатель на следующий.
  53. temp->data = data; // Записываем данные.
  54. if (Head != NULL)
  55. {
  56. temp->Prev = Tail;
  57. Tail->Next = temp;
  58. Tail = temp;
  59. }
  60. else
  61. {
  62. temp->Prev = NULL;
  63. Head = Tail = temp;
  64. }
  65. }
  66.  
  67. public:
  68. // конструктор
  69. StackList() {
  70. Head = NULL;
  71. Tail = NULL;
  72. };
  73. // конструктор для перегрузки
  74. StackList(vector<char> vec, Node* Head, Node* Tail) {
  75. this->stack = vec;
  76. this->stackSize = vec.size() - 1;
  77. this->Head = Head;
  78. this->Tail = Tail;
  79. };
  80. // деструктор
  81. ~StackList() {
  82. stack.clear();
  83. };
  84.  
  85. // функция добавления элемента без перегрузки
  86. void addElem(char ch) {
  87. stack.push_back(ch);
  88. Add(ch);
  89. };
  90.  
  91.  
  92.  
  93. friend const StackList& operator--(StackList& stackList, int);
  94.  
  95.  
  96. // функция добавления элемента с перегрузкой
  97. StackList& operator+=(char ch) {
  98. this->stack.push_back(ch);
  99. this->Add(ch);
  100. return *this;
  101. }
  102.  
  103. // чтение по индексу
  104. char read(int i) {
  105. if (i >= this->stackSize) {
  106. cout << "ERROR";
  107. return '\0';
  108. }
  109. return stack[i];
  110. };
  111.  
  112. // поиск по символу
  113. void search(char ch) {
  114. if (stack.size() == 0) {
  115. cout << "EMPTY ELEMENTES NET UHADI" << endl;
  116. }
  117. else {
  118. int c = 0;
  119. for (int i = 0; i < stack.size(); i++) {
  120. if (ch == stack[i]) {
  121. c++;
  122.  
  123. }
  124. }
  125. cout << "кол-во элементов " << c << endl;
  126. }
  127. };
  128.  
  129. // составление слова
  130. string getWord(int n) {
  131. string str = "";
  132. for (int i = 0; i < stack.size(); i += n) {
  133. str += stack[i];
  134. }
  135. return str;
  136. };
  137.  
  138. void delListElem() {
  139.  
  140. if (stack.size() == 0) {
  141.  
  142. Head = NULL;
  143. Tail = NULL;
  144.  
  145. }
  146. else if (Head->Next == NULL) {
  147. Head = NULL;
  148.  
  149. }
  150. else {
  151. Node* del = Head;
  152. for (int i = 0; i < stack.size() - 2; i++) {
  153. del = del->Next;
  154.  
  155. }
  156.  
  157. del->Next = NULL;
  158.  
  159.  
  160. Tail = del;
  161.  
  162. Tail->Next = NULL;
  163. }
  164. }
  165.  
  166. // печать
  167. virtual void printData() {
  168. if (stack.size() == 0) {
  169.  
  170. }
  171. else {
  172. for (int i = 0; i < stack.size(); i++) {
  173. cout << stack[i];
  174. }
  175. }
  176. cout << endl;
  177. }
  178. };
  179.  
  180. // перегрузка удаления элемента из списка/стека
  181. const StackList& operator--(StackList& stackList, int) {
  182. if (stackList.stack.size() != 0) {
  183. stackList.stack.pop_back();
  184. stackList.delListElem();
  185. return StackList(stackList.stack, stackList.Head, stackList.Tail);
  186. }
  187. return StackList(stackList.stack, NULL, NULL);
  188. };
  189. //функция добавления элемента
  190. void addElems(StackList& l) {
  191. string s;
  192. cin >> s;
  193. for (int i = 0; i < s.size(); i++) {
  194. l.addElem(s[i]);
  195. }
  196.  
  197. }
  198. //дочерний класс ,в котором вы реализуем составление слов из четных и нечетных символов
  199. class NEWCTAK : public StackList {
  200. private:
  201. typedef StackList super;
  202.  
  203. public:
  204.  
  205. NEWCTAK() : StackList()
  206. {}
  207. void printData() { cout << "ПЕЧАТЬ НОВОГО КЛАССА"; super::printData(); }
  208. string PrintStringData(){
  209. string txt = "";
  210. if (stack.size() == 0) {
  211.  
  212. }
  213. else {
  214. for (int i = 0; i < stack.size(); i++) {
  215. txt += stack[i];
  216. }
  217. }
  218.  
  219. txt+="\n";
  220. return txt;
  221. }
  222. string GetWords()
  223. {
  224. string s1, s2;
  225. for (int i = 0; i < stack.size(); i++) {
  226. if (i % 2 == 0) {
  227. s1.push_back(stack[i]);
  228.  
  229.  
  230. }
  231. else {
  232. s2.push_back(stack[i]);
  233.  
  234. }
  235. }
  236.  
  237. return s1 + " " + s2 + "\n";
  238. }
  239. friend std::ostream& operator<<(std::ostream &out, const NEWCTAK &newstack);
  240.  
  241.  
  242. };
  243. std::ostream& operator<<(std::ostream &out, const NEWCTAK &newstack) { //оператор перегрузки <<
  244. //out << "Перегрузка <<\n";
  245.  
  246. for (int i = 0; i < newstack.stack.size(); i++) {
  247. cout << newstack.stack[i];
  248. }
  249.  
  250. //out << myManipulator << 'a';
  251. return out;
  252. }
  253. //класс,который сортирует символы
  254. class NEWCTAK1 : public StackList {
  255. public:
  256.  
  257. NEWCTAK1() : StackList()
  258. {}
  259. void mysort() {
  260. sort(stack.begin(), stack.end());
  261. }
  262. };
  263.  
  264.  
  265. //
  266. void menu(NEWCTAK b) {
  267. int t;
  268.  
  269. do {
  270.  
  271.  
  272.  
  273.  
  274.  
  275. cout << "1) Добавить\n2) Удалить\n3) ПЕЧАТЬ\n4) составление слова\n5) слова домино \n";
  276.  
  277. cin >> t;
  278.  
  279. switch (t) {
  280.  
  281. case 1: {addElems(b);
  282. b.printData();
  283. break;
  284.  
  285. }
  286.  
  287. case 2:b--; break;
  288.  
  289.  
  290.  
  291. case 3:b.printData(); break;
  292.  
  293. case 4:cout <<
  294. b.getWord(2) << endl; break;
  295. case 5: cout << b.GetWords(); break;
  296. }
  297.  
  298. } while (t <= 5);
  299.  
  300. }
  301. void MenuWithFile(NEWCTAK b) {
  302. ifstream in("F:\\SHREK\\input.txt");
  303. fstream out("F:\\SHREK\\output.txt");
  304. if (in.is_open() && out.is_open()) {
  305. int t;
  306.  
  307. do {
  308.  
  309.  
  310.  
  311.  
  312.  
  313. out << "1) Добавить\n2) Удалить\n3) ПЕЧАТЬ\n4) составление слова\n5) слова домино \n";
  314.  
  315. in >> t;
  316. out << myManipulator << '\n';
  317. switch (t) {
  318.  
  319. case 1: {
  320. string s;
  321. in >> s;
  322. for (int i = 0; i < s.size(); i++) {
  323. b.addElem(s[i]);
  324. }
  325.  
  326. out << b.PrintStringData();
  327.  
  328. break;
  329.  
  330. }
  331.  
  332. case 2:b--; break;
  333.  
  334.  
  335.  
  336. case 3: out << b.PrintStringData();
  337.  
  338. break;
  339.  
  340. case 4:out << b.getWord(2) << endl; break;
  341.  
  342. case 5: out << b.GetWords(); break;
  343. case 6: out << b; break;
  344. }
  345.  
  346. } while (t <= 6);
  347. in.close();
  348. out.close();
  349. }
  350. else cout << "NOT YET";
  351.  
  352. }
  353. int main()
  354. {
  355. StackList s;
  356. NEWCTAK b;
  357.  
  358.  
  359.  
  360. setlocale(LC_ALL, "Russian");
  361.  
  362.  
  363. int t;
  364.  
  365. do {
  366.  
  367.  
  368.  
  369.  
  370.  
  371. cout << "1) Добавить\n2) Удалить\n3) поиск\n4) составление слова\n5) меню ногоогоого класс \n";
  372.  
  373. cin >> t;
  374.  
  375. switch (t) {
  376.  
  377. case 1: {addElems(s);
  378. s.printData();
  379. break;
  380.  
  381. }
  382.  
  383. case 2:s--; break;
  384.  
  385.  
  386.  
  387. case 3:s.search('s'); break;
  388.  
  389. case 4:cout <<
  390. s.getWord(2) << endl; break;
  391.  
  392. case 5: menu(b); break;
  393. case 6: MenuWithFile(b); break;
  394. }
  395.  
  396.  
  397. } while (t <= 6);
  398.  
  399.  
  400. return 0;
  401. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement