Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <iostream>
- using namespace std;
- struct undo
- {
- bool op;
- int i,j;
- undo* prev;
- char s[100000];
- };
- void menu()
- {
- printf("\n");
- printf("1:Добавить текст\n");
- printf("2:Удалить между\n");
- printf("3:Назад\n");
- printf("4:Просмотр\n");
- printf("5:Выход\n");
- }
- int main()
- {
- undo * Stack = NULL;
- setlocale(LC_ALL, "Russian");
- int choice;
- char text[10000] = "";
- do
- {
- menu();
- scanf("%d", &choice);
- system("CLS");
- switch (choice)
- {
- case 1:
- {
- char add[10000];
- rewind(stdin);
- gets_s(add);
- strcat(text, add);
- undo *c = (undo *)malloc(sizeof(undo));
- c->prev = Stack;
- Stack = c;
- Stack->op = true;
- Stack->i = strlen(add);
- printf("DONE\n");
- break;
- }
- case 2:
- {
- undo *c = (undo *)malloc(sizeof(undo));
- c->prev = Stack;
- Stack = c;
- Stack->op = false;
- printf("Введите индексы, между которыми хотите удалить текст\n");
- int m, n;
- scanf("%d%d", &n, &m);
- system("CLS");
- char NEW[10000] = "";
- int id = 0;
- int j = 0;
- for (int i = 0; i < strlen(text); i++)
- {
- if (i < n - 1 || m - 1 < i)
- {
- NEW[id++] = text[i];
- }
- else
- {
- Stack->s[j++] = text[i];
- }
- }
- strcpy(text, NEW);
- Stack->i = n;
- Stack->j = m;
- printf("DONE\n");
- break;
- }
- case 3:
- {
- if (!Stack)
- {
- printf("Стек пуст\n");
- break;
- }
- if (Stack->op)
- {
- char NEW[10000] = "";
- int id = 0;
- for (int i = 0; i < strlen(text) - Stack->i; i++)
- {
- NEW[id++] = text[i];
- }
- strcpy(text, NEW);
- undo*c = Stack;
- Stack = Stack->prev;
- free(c);
- }
- else
- {
- char NEW[10000] = "";
- int id = 0;
- for (int i = 0; i < strlen(text); i++)
- {
- if (i == Stack->i - 1)
- {
- for (int j = 0; j < Stack->j-Stack->i+1; j++)
- NEW[id++] = Stack->s[j];
- }
- NEW[id++] = text[i];
- }
- strcpy(text, NEW);
- undo*c = Stack;
- Stack = Stack->prev;
- free(c);
- }
- printf("DONE\n");
- break;
- }
- case 4:
- printf("%s", text);
- break;
- case 5:
- printf("Bye\n");
- break;
- default:
- printf("Такого пункта нет\n");
- break;
- }
- }while (choice != 5);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement