Функция Delete(s1, s2): удалить из строки s1 все символы, встречающиеся в строке s2 - C (СИ)
Формулировка задачи:
Написать и протестировать функцию Delete(s1, s2), которая удаляет из строки s1
все символы, встречающиеся в строке s2
Решение задачи: «Функция Delete(s1, s2): удалить из строки s1 все символы, встречающиеся в строке s2»
textual
Листинг программы
#include <stdio.h> #include <string.h> char * del1(char * from, const char * what) { char * ret = from; while ( ( from = strpbrk(from, what) ) != NULL ) memmove(from, from + 1, strlen(from)); return ret; } char * del2(char * from, const char * what) { while ( *from && strchr(what, *from) ) memmove(from, from + 1, strlen(from)); if ( *from ) del2(from + 1, what); return from; } int main(void) { char from1[] = "any many money more"; char from2[] = "any many money more"; printf("del1: %s\n", del1(from1, "ane")); printf("del2: %s\n", del2(from2, "ane")); return 0; }
Объяснение кода листинга программы
В данном коде представлены две функции для удаления подстроки из строки: del1 и del2.
- Функция del1:
— Входит в состав библиотеки
и . — Вызывает сбивание (confusion) при чтении кода из-за непонимания работы функции strpbrk. — Функция начинает работу с инициализации переменной ret тем же значением, что и входной параметр from. — Использует функцию strpbrk для поиска первого символа из подстроки what в строке from. — Если такой символ найден, функция перемещает все символы в from начиная с этого символа на 1 позицию вперед (т.е. пропускает этот символ) и возвращает новое значение from. — Если strpbrk вернула NULL (т.е. не было найдено ни одного символа из подстроки what), то функция возвращает исходное значение from. - Функция del2:
— Входит в состав библиотеки
и . — Использует цикл while для проверки каждого символа в строке from. — Если текущий символ из подстроки what, то он пропускается (перемещается на 1 позицию вперед) с помощью функции memmove. — Если текущий символ не является символом из подстроки what, то он остается на своем месте. — Если текущий символ является последним в строке (т.е. *from == '\0'), то функция заканчивает свою работу. — Если текущий символ не является последним в строке и он является символом из подстроки what, то функция вызывает сама себя (рекурсия) для обработки оставшейся части строки. - В функции main создаются две строки: from1 и from2.
— Значение from1:
any many money more
. — Значение from2:any many money more
. — Вызывается функция del1 с аргументами from1 иane
. — Вызывается функция del2 с аргументами from2 иane
. — Выводится результат работы функций на экран. Примечание: данный код может вызвать неопределенное поведение (UB), если входная строка будет содержать символы, не входящие в подстроку what.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д