Написать функцию primer(str1, str2) удаляющую из строки str1 последнее вхождение строки str2. Функция возвращает указатель str1 - C (СИ)

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

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

помогите пожалуйста

Решение задачи: «Написать функцию primer(str1, str2) удаляющую из строки str1 последнее вхождение строки str2. Функция возвращает указатель str1»

textual
Листинг программы
#include <stdio.h>
 
char* primer(char* str1, const char* str2)
{
   char* text = str1;
   char* find = NULL;
 
   for (; *text; ++text)
   {
      char* str = text;
      const char* substr = str2;
      for (; *str && *substr && (*str == *substr); ++str, ++substr) { ; }
 
      if (*substr == 0)
      {
         find = text;
      }
   }
 
   if (find)
   {
      size_t length;
      for (length = 0; *str2; ++str2, ++length) { ; }
 
      for (find += length; *find; ++find)
      {
         *(find-length) = *find;
      }
      *(find-length) = 0;
   }
 
   return str1;
}
 
int main()
{
   char text[] = "hello world, hello!";
 
   printf("%s\n", primer(text, "hello"));
 
   return 0;
}

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

  1. Подключение стандартной библиотеки, необходимой для работы с файлами и вводом/выводом данных
  2. Функция primer, принимающая два аргумента типа char* (строки), первый аргумент - строка, в которой нужно найти последнее вхождение подстроки, второй аргумент - подстрока, которую необходимо найти
  3. Создание двух указателей: text - указывает на текущий символ в строке str1, find - указывает на последний найденный символ подстроки str2
  4. Перебор символов в строке str1 до тех пор, пока не встретится символ конца строки или не будет найден символ подстроки str2
  5. Если символ подстроки найден, то происходит перебор символов подстроки до тех пор, пока не встретится символ конца подстроки или не будет найден символ конца строки
  6. Если символ подстроки найден и при этом не встретился символ конца строки, то обновляется значение указателя find
  7. Если символ подстроки найден и при этом встретился символ конца строки, то значение указателя find запоминается, а функция продолжает перебор символов до следующего символа подстроки
  8. Если символ подстроки не найден и встретился символ конца строки, то значение указателя find устанавливается равным text
  9. Если символ подстроки не найден и не встретился символ конца строки, то значение указателя find устанавливается равным NULL
  10. Если значение указателя find не равно NULL, то происходит перебор символов от find до конца строки и обнуление символов, начиная с find-length
  11. Возврат исходной строки str1
  12. Создание массива символов text типа char и инициализация его строкой hello world, hello!
  13. Вывод на экран результата работы функции primer с помощью функции printf
  14. Возврат 0, что означает успешный конец работы программы

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


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

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

10   голосов , оценка 4.2 из 5
Похожие ответы