Zennoma

stringdatebase

Mar 27th, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.32 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <locale.h>
  7. struct stringbase
  8. {
  9.     char string[256];
  10. };
  11. stringbase* add(stringbase* ptr, int kol)
  12. {
  13.     if (kol == 0)
  14.         ptr = new stringbase[kol + 1];
  15.     else {
  16.         stringbase* temp = new stringbase[kol + 1];
  17.         for (int i = 0; i < kol; i++)
  18.             temp[i] = ptr[i];
  19.         delete[] ptr;
  20.         ptr = temp;
  21.     }
  22.     return ptr;
  23. }
  24. void writestring(stringbase* ptr, int abm)
  25. {
  26.     char ministring[128];
  27.     printf("\nВведите строку: ");
  28.     gets_s(ministring);
  29.     ptr[abm].string[0] = strlen(ministring);
  30.     strcpy(ptr[abm].string + 1, ministring);
  31. }
  32. void printstring(const stringbase* ptr, int abm)
  33. {
  34.     for (int i = 0; i < abm; i++) {
  35.         printf("%2d) ", i + 1);
  36.         for (int j = 1; j <= ptr[i].string[0]; j++)
  37.             putchar(ptr[i].string[j]);
  38.         puts("");
  39.     }
  40. }
  41. void concat(stringbase* ptr, int abm)
  42. {
  43.     int num1, num2, input;
  44.     system("cls");
  45.     printf("Конкатенация строк");
  46.     puts("\n1 - Вывести введенные данные");
  47.     puts("2 - Продолжить без печати");
  48.     printf("Ваш выбор: ");
  49.     scanf_s("%d", &input);
  50.     if (input == 1) {
  51.         puts("\nИсходные строки");
  52.         printstring(ptr, abm);
  53.     }
  54.     printf("\nВведите номера строк, которые хотите конкатенировать: ");
  55.     scanf_s("%d %d", &num1, &num2);
  56.     for (int i = 1; i <= ptr[num2 - 1].string[0] + 1; i++)
  57.         ptr[num1 - 1].string[i + ptr[num1 - 1].string[0]] = ptr[num2 -
  58.         1].string[i];
  59.     ptr[num1 - 1].string[0] += ptr[num2 - 1].string[0];
  60.     puts("\nСтроки конкатенированы");
  61.     printstring(ptr, abm);
  62. }
  63. void copystring(stringbase* ptr, int abm)
  64. {
  65.     int num1, num2, input;
  66.     system("cls");
  67.     printf("Копирование строки");
  68.     puts("\n1 - Вывести введенные данные");
  69.     puts("2 - Продолжить без печати");
  70.     printf("Ваш выбор: ");
  71.     scanf_s("%d", &input);
  72.     if (input == 1) {
  73.         puts("\nИсходные строки");
  74.         printstring(ptr, abm);
  75.     }
  76.     printf("\n Введите номер строки, в которую будет происходить копирование, и строки, которая будет копироваться : ");
  77.     scanf_s("%d %d", &num1, &num2);
  78.     for (int i = 1; i <= ptr[num2 - 1].string[0] + 1; i++)
  79.         ptr[num1 - 1].string[i] = ptr[num2 - 1].string[i];
  80.     ptr[num1 - 1].string[0] = ptr[num2 - 1].string[0];
  81.     printf("\nСтрока %d скопирована в строку %d\n", num2, num1);
  82.     printstring(ptr, abm);
  83. }
  84. void search(stringbase* ptr, int abm)
  85. {
  86.     char substring[32];
  87.     int index, num, input, flag = 0;
  88.     system("cls");
  89.     printf("Поиск подстроки");
  90.     puts("\n1 - Вывести введенные данные");
  91.     puts("2 - Продолжить без печати");
  92.     printf("Ваш выбор: ");
  93.     scanf_s("%d", &input);
  94.     if (input == 1) {
  95.         puts("\nИсходные строки");
  96.         printstring(ptr, abm);
  97.     }
  98.     printf("\nВведите номер строки, в которой будет поиск: ");
  99.     scanf_s("%d", &num);
  100.     gets_s(substring);
  101.     printf("Введите подстроку: ");
  102.     gets_s(substring);
  103.     for (int i = 1; i <= ptr[num - 1].string[0] - strlen(substring) + 1 && flag == 0;
  104.         i++)
  105.         if (ptr[num - 1].string[i] == substring[0]) {
  106.             flag = 1;
  107.             index = i;
  108.             for (int j = 1; j < strlen(substring) && flag == 1; j++)
  109.                 if (ptr[num - 1].string[i + j] != substring[j])
  110.                     flag = 0;
  111.         }
  112.     if (flag == 1) {
  113.         printf("\nПодстрока найдена\n ");
  114.         for (int i = 1; i <= ptr[num - 1].string[0]; i++)
  115.             putchar(ptr[num - 1].string[i]);
  116.         puts("");
  117.         for (int i = 1; i < index; i++)
  118.             printf(" ");
  119.         printf("|%s|\n", substring);
  120.     }
  121.     else
  122.         puts("Подстрока не найдена");
  123. }
  124. int main()
  125. {
  126.     setlocale(0, "russian");
  127.     stringbase* ptr = NULL;
  128.     int input, abm = 0;
  129.     char buf[5];
  130.     do {
  131.         system("cls");
  132.         puts("Выберите один из следующих вариантов");
  133.         puts("1) Ввод строки");
  134.         puts("2) Вывод результатов операций");
  135.         puts("3) Конкатенация строк");
  136.         puts("4) Копирование строки");
  137.         puts("5) Поиск подстроки в строке");
  138.         puts("0) Выход");
  139.         printf("Ваш выбор: ");
  140.         scanf_s("%d", &input);
  141.         gets_s(buf);
  142.         switch (input) {
  143.         case 1:
  144.             ptr = add(ptr, abm);
  145.             writestring(ptr, abm);
  146.             abm++;
  147.             puts("Строка введена");
  148.             system("pause");
  149.             break;
  150.         case 2:
  151.             puts("\nРезультаты операций");
  152.             printstring(ptr, abm);
  153.    
  154.             system("pause");
  155.             break;
  156.         case 3:
  157.             if (abm >= 2)
  158.                 concat(ptr, abm);
  159.             else
  160.                 printf("Введите, как минимум, 2 строки\n");
  161.        
  162.             system("pause");
  163.             break;
  164.         case 4:
  165.             if (abm >= 2)
  166.                 copystring(ptr, abm);
  167.             else
  168.                 printf("Введите, как минимум, 2 строки\n");
  169.            
  170.             system("pause");
  171.             break;
  172.         case 5:
  173.             if (abm >= 1)
  174.                 search(ptr, abm);
  175.             else
  176.                 printf("Введите, как минимум, 1 строку\n");
  177.  
  178.             system("pause");
  179.             break;
  180.         case 0:
  181.             break;
  182.         default:
  183.             puts("Ошибка, попробуйте снова");
  184.             system("pause");
  185.             break;
  186.         }
  187.     } while (input != 0);
  188. }
Advertisement
Add Comment
Please, Sign In to add comment