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