Удаление из строки s1 символов, которые есть в s2 - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Данная задача 2.4 из книги по СИ. Нужно удалить из строки s1 символы которые есть в s2. Выкладываем свои версии или более оптимизированные. и так моё решение:
#include <stdio.h>
#include <conio.h>
 
void ExtentedSqueeze(char s[], char u[]);
 
char s[]="klfdgnuiw34hyut8i3mgjeh89ifrdkmuti4ye8fkzermklh45u8erjsdhtetuwriskdgrtyuie5798490wierosdfkbhjy578ri501";
char u[]="0123456789";
 
main()
{
ExtentedSqueeze(s,u);      
printf("%s",s); 
getch();     
}

void ExtentedSqueeze(char s[], char u[])
{
int i,j,k,l;
 
for(k=0;u[k] != '\0';k++)
;                         
for(l=k;l >= 0;l--)
{                     
    for(i=j=0;s[i] != '\0';i++)             
    { if(s[i] != u[l])
        {s[j++]=s[i];}}
    s[j]='\0';                       
}//for
}//function

Решение задачи: «Удаление из строки s1 символов, которые есть в s2»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
 void remove_chars(char * str, const char * chars) {
    if ( str = strpbrk(str, chars) ) {
        memmove(str, str + 1, strlen(str));
        remove_chars(str, chars);
    }
}
 
typedef char str_t[256];
#define get_str(s) ( scanf("%255[^\n]%*c", (s)) == 1 )
 
#ifndef HAVE_BZERO
# define bzero(ptr,n) ( memset( ( ptr ), 0, ( n ) ) )
#endif
 
int main(void) {
 
    str_t s1, s2;
    
    while ( printf("String: ") && get_str(s1) && printf("Characters: ") && get_str(s2) ) {
        remove_chars(s1, s2);
        printf("Result: %s\n", s1);
        bzero(s1, sizeof(str_t));
        bzero(s2, sizeof(str_t));
    }
    
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы со строками и вводом-выводом
  2. Объявление функции remove_chars, которая принимает указатель на строку и указатель на строку символов для удаления
  3. Внутри функции remove_chars используется функция strpbrk для поиска первого вхождения символа из строки chars в строке str
  4. Если символ найден, то вызывается функция memmove для перемещения всех символов в строке str на 1 позицию вперед, чтобы удалить символ
  5. Затем вызывается рекурсивно функция remove_chars для оставшейся части строки после удаления символа
  6. В функции main объявлены две строки s1 и s2 типа str_t
  7. В цикле while запрашиваются строки s1 и s2 с помощью функции scanf
  8. Вызывается функция remove_chars для удаления символов из строки s1, указанных в строке s2
  9. Результат удаления выводится на экран с помощью функции printf
  10. Строки s1 и s2 очищаются с помощью функции bzero перед следующим запросом на ввод
  11. Цикл while продолжается, пока пользователь вводит строки s1 и s2
  12. В конце программы возвращается значение 0, чтобы указать, что программа успешно завершилась

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


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

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

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