Функция 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.

  1. Функция del1: — Входит в состав библиотеки и . — Вызывает сбивание (confusion) при чтении кода из-за непонимания работы функции strpbrk. — Функция начинает работу с инициализации переменной ret тем же значением, что и входной параметр from. — Использует функцию strpbrk для поиска первого символа из подстроки what в строке from. — Если такой символ найден, функция перемещает все символы в from начиная с этого символа на 1 позицию вперед (т.е. пропускает этот символ) и возвращает новое значение from. — Если strpbrk вернула NULL (т.е. не было найдено ни одного символа из подстроки what), то функция возвращает исходное значение from.
  2. Функция del2: — Входит в состав библиотеки и . — Использует цикл while для проверки каждого символа в строке from. — Если текущий символ из подстроки what, то он пропускается (перемещается на 1 позицию вперед) с помощью функции memmove. — Если текущий символ не является символом из подстроки what, то он остается на своем месте. — Если текущий символ является последним в строке (т.е. *from == '\0'), то функция заканчивает свою работу. — Если текущий символ не является последним в строке и он является символом из подстроки what, то функция вызывает сама себя (рекурсия) для обработки оставшейся части строки.
  3. В функции main создаются две строки: from1 и from2. — Значение from1: any many money more. — Значение from2: any many money more. — Вызывается функция del1 с аргументами from1 и ane. — Вызывается функция del2 с аргументами from2 и ane. — Выводится результат работы функций на экран. Примечание: данный код может вызвать неопределенное поведение (UB), если входная строка будет содержать символы, не входящие в подстроку what.

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


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

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

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