Удалить все буквы из строки - C (СИ)
Формулировка задачи:
День добрый, подскажите, пожалуйста. Нужно реализовать вот такую вещь:
Ввести строку символов, если ее длина >5, удалить все буквы – a..z.
Решение задачи: «Удалить все буквы из строки»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char * remove_if(char * str, int (*func)(int)) {
char * s = str;
while ( *s ) {
if ( func(*s) )
memmove(s, s + 1, strlen(s));
else
++s;
}
return str;
}
int main(void) {
char buf[BUFSIZ];
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
printf("Result: %s", ( strlen(buf) > 5 + 1 /* '\n' at the end of string */ ) ? remove_if(buf, isalpha) : buf);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- remove_if - это функция, которая принимает два аргумента: строку и функцию, определенную в виде указателя на функцию. Эта функция перемещает все символы в строке, которые не удовлетворяют условию, определенному функцией, на одну позицию вперед, тем самым
удаляяих. Функция возвращает новую строку безудаленныхсимволов. - main - это функция, которая считывает строку от пользователя, вызывает функцию remove_if для этой строки, используя функцию isalpha в качестве условия, и затем выводит результат обратно пользователю.
- buf - это буфер, который используется для хранения строки, считанной из стандартного ввода.
- BUFSIZ - это размер буфера.
- printf и fgets - это функции ввода, используемые для считывания строки от пользователя.
- strlen - это функция, которая возвращает длину строки.
- isalpha - это функция, определенная как указатель на функцию, которая возвращает ненулевой результат для любых буквенно-цифровых символов и ноль для всех остальных символов.
- memmove - это функция, которая перемещает блок памяти в другую позицию в том же блоке памяти, не меняя его содержимое. В этом коде она используется для
удалениясимволов из строки, перемещая все символы после них на одну позицию вперед. - \n - это символ новой строки, который указывает на конец строки.
- return 0 - это оператор, который указывает на успешный конец выполнения функции.