Функция: замена подстроки в строке на заданную последовательность символов - C (СИ)
Формулировка задачи:
Не успеваю сделать такое задание для шараги, если кто может помочь хотя бы советом или напутствием, как нужно делать или где почитать про это, или каким-то примером кода ,ибо даже не понимаю , что должно из этого получиться. спасибо.
Решение задачи: «Функция: замена подстроки в строке на заданную последовательность символов»
textual
Листинг программы
#include <string.h> #include <stdio.h> #include <stdlib.h> // Функция: замена подстроки в строке на заданную последовательность символов - C (СИ) char* find_and_insert(char* str,char* sub_str, char* sub_str_rep){ const int BUFFER_SIZE = 256; char* buffer = NULL; int buffer_len = 0; // если входных данных нет - ничего не делаем. if (str && sub_str && sub_str_rep){ // предпологаем что под строку str отведенно достаточно памяти. // в противном случае ничего не делаем // если длина строки str достаточна для хранения новой строки, продолжаем if( strlen(str) < strlen(str) - strlen(sub_str) + strlen(sub_str_rep) ){ // временный массив buffer = (char*)malloc(BUFFER_SIZE); // чистим массив от мусора memset(buffer, 0, strlen(str)); // Делаем дело. strlen strstr strcat strcpy и strncpy // стандартные ф-ии в string.h strncpy(buffer, str, strlen(str) - strlen(strstr(str,sub_str)) ); strcat(buffer, sub_str_rep); strcat(buffer, strstr(str,sub_str) + strlen(sub_str)); //strcat(buffer, str + strlen(str) - strlen(strstr(str,sub_str)) + 1); //strcat(buffer, strstr(str,su)) strcpy(str, buffer); // освобождаем память отведённую под массив free(buffer); } } return str; } // пример использования функции int main(){ const int MAX_STRING_LENGHT = 256; // строка char* str = (char*)malloc(MAX_STRING_LENGHT); // подстрока которую надо найти char* sub = (char*)malloc(MAX_STRING_LENGHT); // подстрока на которую надо заменить найденную подстроку char* rep = (char*)malloc(MAX_STRING_LENGHT); // чистим строки memset(str, 0, MAX_STRING_LENGHT); memset(sub, 0, MAX_STRING_LENGHT); memset(rep, 0, MAX_STRING_LENGHT); // присваиваем строки strcpy(str,"hello my world"); strcpy(sub,"my"); strcpy(rep,"shit"); // ищем, заменяем и печатаем в консоли printf("%s\n", find_and_insert(str, sub, rep) ); // освобождаем память выделенную под строки free(rep); free(sub); free(str); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками.
- Объявление функции
find_and_insert
, которая выполняет замену подстроки в строке на заданную последовательность символов. - Установка констант для определения размеров буферов.
- Проверка наличия и корректности входных данных.
- Проверка достаточности длины строки
str
для выполнения операции замены. - Выделение памяти под временный массив
buffer
. - Копирование части строки
str
вbuffer
с помощью функцииstrncpy
. - Добавление подстроки
sub_str_rep
после найденной подстрокиsub_str
вbuffer
с помощью функцииstrcat
. - Добавление оставшейся части строки
str
после замены вbuffer
с помощью функцииstrcat
. - Копирование измененной строки из
buffer
вstr
с помощью функцииstrcpy
. - Освобождение памяти, выделенной под
buffer
. - Пример использования функции
find_and_insert
в функцииmain
. - Выделение памяти под строки
str
,sub
иrep
. - Очистка строк
str
,sub
иrep
с помощью функцииmemset
. - Присваивание значения строкам
str
,sub
иrep
с помощью функцииstrcpy
. - Выполнение замены подстроки в строке
str
на подстрокуrep
с помощью функцииfind_and_insert
. - Вывод результата замены в консоль с помощью функции
printf
. - Освобождение памяти, выделенной под
rep
,sub
иstr
. - Возврат значения 0, указывающего на успешное выполнение программы.
- Завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д