Advertisement
Zennoma

Untitled

Mar 21st, 2020
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 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. break;
  148. case 2:
  149. puts("\nРезультаты операций");
  150. printstring(ptr, abm);
  151. printf("\nДля продолжения нажмите любую клавишу...");
  152. system("pause");
  153. break;
  154. case 3:
  155. if (abm >= 2)
  156. concat(ptr, abm);
  157. else
  158. printf("Введите, как минимум, 2 строки\n");
  159. printf("\nДля продолжения нажмите любую клавишу...");
  160. system("pause");
  161. break;
  162. case 4:
  163. if (abm >= 2)
  164. copystring(ptr, abm);
  165. else
  166. printf("Введите, как минимум, 2 строки\n");
  167. printf("\nДля продолжения нажмите любую клавишу...");
  168. system("pause");
  169. break;
  170. case 5:
  171. if (abm >= 1)
  172. search(ptr, abm);
  173. else
  174. printf("Введите, как минимум, 1 строки\n");
  175. printf("\nДля продолжения нажмите любую клавишу...");
  176. system("pause");
  177. break;
  178. case 0:
  179. break;
  180. default:
  181. puts("Неверно введённые данные");
  182. system("pause");
  183. break;
  184. }
  185. } while (input != 0);
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement