Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <locale.h>
- struct stringbase
- {
- char string[256];
- };
- stringbase* add(stringbase* ptr, int kol)
- {
- if (kol == 0)
- ptr = new stringbase[kol + 1];
- else {
- stringbase* temp = new stringbase[kol + 1];
- for (int i = 0; i < kol; i++)
- temp[i] = ptr[i];
- delete[] ptr;
- ptr = temp;
- }
- return ptr;
- }
- void writestring(stringbase* ptr, int abm)
- {
- char ministring[128];
- printf("\nВведите строку: ");
- gets_s(ministring);
- ptr[abm].string[0] = strlen(ministring);
- strcpy(ptr[abm].string + 1, ministring);
- }
- void printstring(const stringbase* ptr, int abm)
- {
- for (int i = 0; i < abm; i++) {
- printf("%2d) ", i + 1);
- for (int j = 1; j <= ptr[i].string[0]; j++)
- putchar(ptr[i].string[j]);
- puts("");
- }
- }
- void concat(stringbase* ptr, int abm)
- {
- int num1, num2, input;
- system("cls");
- printf("Конкатенация строк");
- puts("\n1 - Распечатать строки");
- puts("2 - Продолжить без печати");
- printf("Ваш выбор: ");
- scanf_s("%d", &input);
- if (input == 1) {
- puts("\nИсходные строки");
- printstring(ptr, abm);
- }
- printf("\nВведите номера строк, которые хотите конкатенировать: ");
- scanf_s("%d %d", &num1, &num2);
- for (int i = 1; i <= ptr[num2 - 1].string[0] + 1; i++)
- ptr[num1 - 1].string[i + ptr[num1 - 1].string[0]] = ptr[num2 -
- 1].string[i];
- ptr[num1 - 1].string[0] += ptr[num2 - 1].string[0];
- puts("\nСтроки конкатенированы");
- printstring(ptr, abm);
- }
- void copystring(stringbase* ptr, int abm)
- {
- int num1, num2, input;
- system("cls");
- printf("Копирование строки");
- puts("\n1 - Распечатать строки");
- puts("2 - Продолжить без печати");
- printf("Ваш выбор: ");
- scanf_s("%d", &input);
- if (input == 1) {
- puts("\nИсходные строки");
- printstring(ptr, abm);
- }
- printf("\n Введите номер строки, в которую будет происходить копирование, и строки, которая будет копироваться : ");
- scanf_s("%d %d", &num1, &num2);
- for (int i = 1; i <= ptr[num2 - 1].string[0] + 1; i++)
- ptr[num1 - 1].string[i] = ptr[num2 - 1].string[i];
- ptr[num1 - 1].string[0] = ptr[num2 - 1].string[0];
- printf("\nСтрока %d скопирована в строку %d\n", num2, num1);
- printstring(ptr, abm);
- }
- void search(stringbase* ptr, int abm)
- {
- char substring[32];
- int index, num, input, flag = 0;
- system("cls");
- printf("Поиск подстроки");
- puts("\n1 - Распечатать строки");
- puts("2 - Продолжить без печати");
- printf("Ваш выбор: ");
- scanf_s("%d", &input);
- if (input == 1) {
- puts("\nИсходные строки");
- printstring(ptr, abm);
- }
- printf("\nВведите номер строки, в которой будет поиск: ");
- scanf_s("%d", &num);
- gets_s(substring);
- printf("Введите подстроку: ");
- gets_s(substring);
- for (int i = 1; i <= ptr[num - 1].string[0] - strlen(substring) + 1 && flag == 0;
- i++)
- if (ptr[num - 1].string[i] == substring[0]) {
- flag = 1;
- index = i;
- for (int j = 1; j < strlen(substring) && flag == 1; j++)
- if (ptr[num - 1].string[i + j] != substring[j])
- flag = 0;
- }
- if (flag == 1) {
- printf("\nПодстрока найдена\n ");
- for (int i = 1; i <= ptr[num - 1].string[0]; i++)
- putchar(ptr[num - 1].string[i]);
- puts("");
- for (int i = 1; i < index; i++)
- printf(" ");
- printf("|%s|\n", substring);
- }
- else
- puts("Подстрока не найдена");
- }
- int main()
- {
- setlocale(0, "russian");
- stringbase* ptr = NULL;
- int input, abm = 0;
- char buf[5];
- do {
- system("cls");
- puts("Выберите один из следующих вариантов");
- puts("1) Ввод строки");
- puts("2) Вывод результатов операций");
- puts("3) Конкатенация строк");
- puts("4) Копирование строки");
- puts("5) Поиск подстроки в строке");
- puts("0) Выход");
- printf("Ваш выбор: ");
- scanf_s("%d", &input);
- gets_s(buf);
- switch (input) {
- case 1:
- ptr = add(ptr, abm);
- writestring(ptr, abm);
- abm++;
- break;
- case 2:
- puts("\nРезультаты операций");
- printstring(ptr, abm);
- printf("\nДля продолжения нажмите любую клавишу...");
- system("pause");
- break;
- case 3:
- if (abm >= 2)
- concat(ptr, abm);
- else
- printf("Введите, как минимум, 2 строки\n");
- printf("\nДля продолжения нажмите любую клавишу...");
- system("pause");
- break;
- case 4:
- if (abm >= 2)
- copystring(ptr, abm);
- else
- printf("Введите, как минимум, 2 строки\n");
- printf("\nДля продолжения нажмите любую клавишу...");
- system("pause");
- break;
- case 5:
- if (abm >= 1)
- search(ptr, abm);
- else
- printf("Введите, как минимум, 1 строки\n");
- printf("\nДля продолжения нажмите любую клавишу...");
- system("pause");
- break;
- case 0:
- break;
- default:
- puts("Неверно введённые данные");
- system("pause");
- break;
- }
- } while (input != 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement