Написать функцию 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, что означает успешный конец работы программы