Advertisement
codegod313

Julia_

May 29th, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <locale.h>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. struct undo
  9. {
  10.     bool op;
  11.     int i,j;
  12.     undo* prev;
  13.     char s[100000];
  14. };
  15.  
  16. void menu()
  17. {
  18.     printf("\n");
  19.     printf("1:Добавить текст\n");
  20.     printf("2:Удалить между\n");
  21.     printf("3:Назад\n");
  22.     printf("4:Просмотр\n");
  23.     printf("5:Выход\n");
  24. }
  25.  
  26. int main()
  27. {
  28.     undo * Stack = NULL;
  29.     setlocale(LC_ALL, "Russian");
  30.     int choice;
  31.     char text[10000] = "";
  32.     do
  33.     {
  34.         menu();
  35.         scanf("%d", &choice);
  36.         system("CLS");
  37.         switch (choice)
  38.         {
  39.         case 1:
  40.         {
  41.             char add[10000];
  42.             rewind(stdin);
  43.             gets_s(add);
  44.             strcat(text, add);
  45.             undo *c = (undo *)malloc(sizeof(undo));
  46.             c->prev = Stack;
  47.             Stack = c;
  48.             Stack->op = true;
  49.             Stack->i = strlen(add);
  50.             printf("DONE\n");
  51.             break;
  52.         }
  53.         case 2:
  54.         {
  55.             undo *c = (undo *)malloc(sizeof(undo));
  56.             c->prev = Stack;
  57.             Stack = c;
  58.             Stack->op = false;
  59.             printf("Введите индексы, между которыми хотите удалить текст\n");
  60.             int m, n;
  61.             scanf("%d%d", &n, &m);
  62.             system("CLS");
  63.             char NEW[10000] = "";
  64.             int id = 0;
  65.             int j = 0;
  66.             for (int i = 0; i < strlen(text); i++)
  67.             {
  68.                 if (i < n - 1 || m - 1 < i)
  69.                 {
  70.                     NEW[id++] = text[i];
  71.                 }
  72.                 else
  73.                 {
  74.                     Stack->s[j++] = text[i];
  75.                 }
  76.             }
  77.             strcpy(text, NEW);
  78.             Stack->i = n;
  79.             Stack->j = m;
  80.             printf("DONE\n");
  81.             break;
  82.         }
  83.         case 3:
  84.         {
  85.             if (!Stack)
  86.             {
  87.                 printf("Стек пуст\n");
  88.                 break;
  89.             }
  90.             if (Stack->op)
  91.             {
  92.                 char NEW[10000] = "";
  93.                 int id = 0;
  94.                 for (int i = 0; i < strlen(text) - Stack->i; i++)
  95.                 {
  96.                     NEW[id++] = text[i];
  97.                 }
  98.                 strcpy(text, NEW);
  99.                 undo*c = Stack;
  100.                 Stack = Stack->prev;
  101.                 free(c);
  102.             }
  103.             else
  104.             {
  105.                 char NEW[10000] = "";
  106.                 int id = 0;
  107.                 for (int i = 0; i < strlen(text); i++)
  108.                 {
  109.  
  110.                     if (i == Stack->i - 1)
  111.                     {
  112.                         for (int j = 0; j < Stack->j-Stack->i+1; j++)
  113.                             NEW[id++] = Stack->s[j];
  114.                     }
  115.                     NEW[id++] = text[i];
  116.                 }
  117.                 strcpy(text, NEW);
  118.                 undo*c = Stack;
  119.                 Stack = Stack->prev;
  120.                 free(c);
  121.             }
  122.             printf("DONE\n");
  123.            
  124.             break;
  125.         }
  126.         case 4:
  127.             printf("%s", text);
  128.             break;
  129.         case 5:
  130.             printf("Bye\n");
  131.             break;
  132.  
  133.         default:
  134.             printf("Такого пункта нет\n");
  135.             break;
  136.         }
  137.     }while (choice != 5);
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement