Функция: замена подстроки в строке на заданную последовательность символов - 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, указывающего на успешное выполнение программы.
- Завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д