Удаление из строки 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, чтобы указать, что программа успешно завершилась