Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include<algorithm>
- #include <fstream>
- using namespace std;
- class Manip_tor {};
- constexpr Manip_tor myManipulator;
- struct toggled_ostream
- {
- std::ostream& os;
- };
- inline toggled_ostream operator << (std::ostream& os, Manip_tor)
- {
- return { os };
- }
- template <typename T>
- std::ostream& operator << (toggled_ostream tos, const T& v)
- {
- return tos.os << v;
- }
- std::ostream& operator << (toggled_ostream tos, char v)
- {
- cout << "My_manipulator";
- return tos.os << v;
- }
- struct Node
- {
- char data; // Данные.
- Node* Next, * Prev; // Указатели на следующий и предыдущий элементы.
- };
- class StackList {
- protected:
- long int stackSize = 0;
- vector<char> stack;
- Node* Head, * Tail;
- // добавление элемента в список
- void Add(char data)
- {
- Node* temp = new Node; // Создаем новый элемент.
- temp->Next = temp->Prev = NULL; // Обнуляем его указатель на следующий.
- temp->data = data; // Записываем данные.
- if (Head != NULL)
- {
- temp->Prev = Tail;
- Tail->Next = temp;
- Tail = temp;
- }
- else
- {
- temp->Prev = NULL;
- Head = Tail = temp;
- }
- }
- public:
- // конструктор
- StackList() {
- Head = NULL;
- Tail = NULL;
- };
- // конструктор для перегрузки
- StackList(vector<char> vec, Node* Head, Node* Tail) {
- this->stack = vec;
- this->stackSize = vec.size() - 1;
- this->Head = Head;
- this->Tail = Tail;
- };
- // деструктор
- ~StackList() {
- stack.clear();
- };
- // функция добавления элемента без перегрузки
- void addElem(char ch) {
- stack.push_back(ch);
- Add(ch);
- };
- friend const StackList& operator--(StackList& stackList, int);
- // функция добавления элемента с перегрузкой
- StackList& operator+=(char ch) {
- this->stack.push_back(ch);
- this->Add(ch);
- return *this;
- }
- // чтение по индексу
- char read(int i) {
- if (i >= this->stackSize) {
- cout << "ERROR";
- return '\0';
- }
- return stack[i];
- };
- // поиск по символу
- void search(char ch) {
- if (stack.size() == 0) {
- cout << "EMPTY ELEMENTES NET UHADI" << endl;
- }
- else {
- int c = 0;
- for (int i = 0; i < stack.size(); i++) {
- if (ch == stack[i]) {
- c++;
- }
- }
- cout << "кол-во элементов " << c << endl;
- }
- };
- // составление слова
- string getWord(int n) {
- string str = "";
- for (int i = 0; i < stack.size(); i += n) {
- str += stack[i];
- }
- return str;
- };
- void delListElem() {
- if (stack.size() == 0) {
- Head = NULL;
- Tail = NULL;
- }
- else if (Head->Next == NULL) {
- Head = NULL;
- }
- else {
- Node* del = Head;
- for (int i = 0; i < stack.size() - 2; i++) {
- del = del->Next;
- }
- del->Next = NULL;
- Tail = del;
- Tail->Next = NULL;
- }
- }
- // печать
- virtual void printData() {
- if (stack.size() == 0) {
- }
- else {
- for (int i = 0; i < stack.size(); i++) {
- cout << stack[i];
- }
- }
- cout << endl;
- }
- };
- // перегрузка удаления элемента из списка/стека
- const StackList& operator--(StackList& stackList, int) {
- if (stackList.stack.size() != 0) {
- stackList.stack.pop_back();
- stackList.delListElem();
- return StackList(stackList.stack, stackList.Head, stackList.Tail);
- }
- return StackList(stackList.stack, NULL, NULL);
- };
- //функция добавления элемента
- void addElems(StackList& l) {
- string s;
- cin >> s;
- for (int i = 0; i < s.size(); i++) {
- l.addElem(s[i]);
- }
- }
- //дочерний класс ,в котором вы реализуем составление слов из четных и нечетных символов
- class NEWCTAK : public StackList {
- private:
- typedef StackList super;
- public:
- NEWCTAK() : StackList()
- {}
- void printData() { cout << "ПЕЧАТЬ НОВОГО КЛАССА"; super::printData(); }
- string PrintStringData(){
- string txt = "";
- if (stack.size() == 0) {
- }
- else {
- for (int i = 0; i < stack.size(); i++) {
- txt += stack[i];
- }
- }
- txt+="\n";
- return txt;
- }
- string GetWords()
- {
- string s1, s2;
- for (int i = 0; i < stack.size(); i++) {
- if (i % 2 == 0) {
- s1.push_back(stack[i]);
- }
- else {
- s2.push_back(stack[i]);
- }
- }
- return s1 + " " + s2 + "\n";
- }
- friend std::ostream& operator<<(std::ostream &out, const NEWCTAK &newstack);
- };
- std::ostream& operator<<(std::ostream &out, const NEWCTAK &newstack) { //оператор перегрузки <<
- //out << "Перегрузка <<\n";
- for (int i = 0; i < newstack.stack.size(); i++) {
- cout << newstack.stack[i];
- }
- //out << myManipulator << 'a';
- return out;
- }
- //класс,который сортирует символы
- class NEWCTAK1 : public StackList {
- public:
- NEWCTAK1() : StackList()
- {}
- void mysort() {
- sort(stack.begin(), stack.end());
- }
- };
- //
- void menu(NEWCTAK b) {
- int t;
- do {
- cout << "1) Добавить\n2) Удалить\n3) ПЕЧАТЬ\n4) составление слова\n5) слова домино \n";
- cin >> t;
- switch (t) {
- case 1: {addElems(b);
- b.printData();
- break;
- }
- case 2:b--; break;
- case 3:b.printData(); break;
- case 4:cout <<
- b.getWord(2) << endl; break;
- case 5: cout << b.GetWords(); break;
- }
- } while (t <= 5);
- }
- void MenuWithFile(NEWCTAK b) {
- ifstream in("F:\\SHREK\\input.txt");
- fstream out("F:\\SHREK\\output.txt");
- if (in.is_open() && out.is_open()) {
- int t;
- do {
- out << "1) Добавить\n2) Удалить\n3) ПЕЧАТЬ\n4) составление слова\n5) слова домино \n";
- in >> t;
- out << myManipulator << '\n';
- switch (t) {
- case 1: {
- string s;
- in >> s;
- for (int i = 0; i < s.size(); i++) {
- b.addElem(s[i]);
- }
- out << b.PrintStringData();
- break;
- }
- case 2:b--; break;
- case 3: out << b.PrintStringData();
- break;
- case 4:out << b.getWord(2) << endl; break;
- case 5: out << b.GetWords(); break;
- case 6: out << b; break;
- }
- } while (t <= 6);
- in.close();
- out.close();
- }
- else cout << "NOT YET";
- }
- int main()
- {
- StackList s;
- NEWCTAK b;
- setlocale(LC_ALL, "Russian");
- int t;
- do {
- cout << "1) Добавить\n2) Удалить\n3) поиск\n4) составление слова\n5) меню ногоогоого класс \n";
- cin >> t;
- switch (t) {
- case 1: {addElems(s);
- s.printData();
- break;
- }
- case 2:s--; break;
- case 3:s.search('s'); break;
- case 4:cout <<
- s.getWord(2) << endl; break;
- case 5: menu(b); break;
- case 6: MenuWithFile(b); break;
- }
- } while (t <= 6);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement