Написать функцию 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; }
Объяснение кода листинга программы
- Подключение стандартной библиотеки, необходимой для работы с файлами и вводом/выводом данных
- Функция primer, принимающая два аргумента типа char* (строки), первый аргумент - строка, в которой нужно найти последнее вхождение подстроки, второй аргумент - подстрока, которую необходимо найти
- Создание двух указателей: text - указывает на текущий символ в строке str1, find - указывает на последний найденный символ подстроки str2
- Перебор символов в строке str1 до тех пор, пока не встретится символ конца строки или не будет найден символ подстроки str2
- Если символ подстроки найден, то происходит перебор символов подстроки до тех пор, пока не встретится символ конца подстроки или не будет найден символ конца строки
- Если символ подстроки найден и при этом не встретился символ конца строки, то обновляется значение указателя find
- Если символ подстроки найден и при этом встретился символ конца строки, то значение указателя find запоминается, а функция продолжает перебор символов до следующего символа подстроки
- Если символ подстроки не найден и встретился символ конца строки, то значение указателя find устанавливается равным text
- Если символ подстроки не найден и не встретился символ конца строки, то значение указателя find устанавливается равным NULL
- Если значение указателя find не равно NULL, то происходит перебор символов от find до конца строки и обнуление символов, начиная с find-length
- Возврат исходной строки str1
- Создание массива символов text типа char и инициализация его строкой
hello world, hello!
- Вывод на экран результата работы функции primer с помощью функции printf
- Возврат 0, что означает успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д