Функция: замена подстроки в строке на заданную последовательность символов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Не успеваю сделать такое задание для шараги, если кто может помочь хотя бы советом или напутствием, как нужно делать или где почитать про это, или каким-то примером кода ,ибо даже не понимаю , что должно из этого получиться. спасибо.

Решение задачи: «Функция: замена подстроки в строке на заданную последовательность символов»

textual
Листинг программы
  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. // Функция: замена подстроки в строке на заданную последовательность символов - C (СИ)
  6. char* find_and_insert(char* str,char* sub_str, char* sub_str_rep){
  7.   const int BUFFER_SIZE = 256;
  8.   char* buffer = NULL;
  9.   int buffer_len = 0;
  10.   // если входных данных нет - ничего не делаем.
  11.   if (str && sub_str && sub_str_rep){
  12.    
  13.     // предпологаем что под строку str отведенно достаточно памяти.
  14.     // в противном случае ничего не делаем    
  15.    
  16.     // если длина строки str достаточна для хранения новой строки, продолжаем
  17.     if( strlen(str) < strlen(str) - strlen(sub_str) + strlen(sub_str_rep) ){
  18.       // временный массив
  19.       buffer = (char*)malloc(BUFFER_SIZE);
  20.       // чистим массив от мусора
  21.       memset(buffer, 0, strlen(str));
  22.      
  23.       // Делаем дело. strlen strstr strcat strcpy и strncpy
  24.       // стандартные ф-ии в string.h
  25.       strncpy(buffer, str, strlen(str) - strlen(strstr(str,sub_str)) );
  26.       strcat(buffer, sub_str_rep);  
  27.       strcat(buffer, strstr(str,sub_str) + strlen(sub_str));
  28.      
  29.      
  30.       //strcat(buffer, str + strlen(str) - strlen(strstr(str,sub_str)) + 1);      
  31.       //strcat(buffer, strstr(str,su))
  32.       strcpy(str, buffer);  
  33.      
  34.       // освобождаем память отведённую под массив
  35.       free(buffer);
  36.     }
  37.   }
  38.   return str;
  39. }
  40.  
  41.  
  42. // пример использования функции
  43. int main(){
  44.   const int MAX_STRING_LENGHT = 256;
  45.   // строка
  46.   char* str = (char*)malloc(MAX_STRING_LENGHT);
  47.   // подстрока которую надо найти
  48.   char* sub = (char*)malloc(MAX_STRING_LENGHT);
  49.   // подстрока на которую надо заменить найденную подстроку
  50.   char* rep = (char*)malloc(MAX_STRING_LENGHT);
  51.  
  52.   // чистим строки
  53.   memset(str, 0, MAX_STRING_LENGHT);
  54.   memset(sub, 0, MAX_STRING_LENGHT);
  55.   memset(rep, 0, MAX_STRING_LENGHT);
  56.  
  57.   // присваиваем строки
  58.   strcpy(str,"hello my world");
  59.   strcpy(sub,"my");
  60.   strcpy(rep,"shit");
  61.  
  62.   // ищем, заменяем и печатаем в консоли
  63.   printf("%s\n", find_and_insert(str, sub, rep) );
  64.  
  65.   // освобождаем память выделенную под строки
  66.   free(rep);
  67.   free(sub);
  68.   free(str);
  69.  
  70.   return 0;
  71. }

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы со строками.
  2. Объявление функции find_and_insert, которая выполняет замену подстроки в строке на заданную последовательность символов.
  3. Установка констант для определения размеров буферов.
  4. Проверка наличия и корректности входных данных.
  5. Проверка достаточности длины строки str для выполнения операции замены.
  6. Выделение памяти под временный массив buffer.
  7. Копирование части строки str в buffer с помощью функции strncpy.
  8. Добавление подстроки sub_str_rep после найденной подстроки sub_str в buffer с помощью функции strcat.
  9. Добавление оставшейся части строки str после замены в buffer с помощью функции strcat.
  10. Копирование измененной строки из buffer в str с помощью функции strcpy.
  11. Освобождение памяти, выделенной под buffer.
  12. Пример использования функции find_and_insert в функции main.
  13. Выделение памяти под строки str, sub и rep.
  14. Очистка строк str, sub и rep с помощью функции memset.
  15. Присваивание значения строкам str, sub и rep с помощью функции strcpy.
  16. Выполнение замены подстроки в строке str на подстроку rep с помощью функции find_and_insert.
  17. Вывод результата замены в консоль с помощью функции printf.
  18. Освобождение памяти, выделенной под rep, sub и str.
  19. Возврат значения 0, указывающего на успешное выполнение программы.
  20. Завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы