Удаление из строки 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; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками и вводом-выводом
- Объявление функции
remove_chars
, которая принимает указатель на строку и указатель на строку символов для удаления - Внутри функции
remove_chars
используется функцияstrpbrk
для поиска первого вхождения символа из строкиchars
в строкеstr
- Если символ найден, то вызывается функция
memmove
для перемещения всех символов в строкеstr
на 1 позицию вперед, чтобы удалить символ - Затем вызывается рекурсивно функция
remove_chars
для оставшейся части строки после удаления символа - В функции
main
объявлены две строкиs1
иs2
типаstr_t
- В цикле
while
запрашиваются строкиs1
иs2
с помощью функцииscanf
- Вызывается функция
remove_chars
для удаления символов из строкиs1
, указанных в строкеs2
- Результат удаления выводится на экран с помощью функции
printf
- Строки
s1
иs2
очищаются с помощью функцииbzero
перед следующим запросом на ввод - Цикл
while
продолжается, пока пользователь вводит строкиs1
иs2
- В конце программы возвращается значение
0
, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д