Удалить все символы в строке, не являющиеся буквами - C (СИ)
Формулировка задачи:
Удалить все символы в строке, не являющиеся буквами, а также
заменить множественные пробелы одним.
Решение задачи: «Удалить все символы в строке, не являющиеся буквами»
textual
Листинг программы
- #include <stdio.h>
- #include <ctype.h>
- char* ch_remove(char* s, int (*pfn)(const char*)){
- char* p1, *p2;
- for(p1 = p2 = s; *p1; *p1 = *(++p2)){
- if(! (*pfn)(p2))
- ++p1;
- }
- return s;
- }
- static int cmp(const char* s){
- return (! isalpha(*s) && ! isspace(*s)) ||
- ((*s == ' ') && (*s == *(s + 1)));
- }
- int main(void){
- char s[] = ",...[]]]dog, fox, [bat], {{{{cat},,,, fin..";
- puts( ch_remove(s, cmp) );
- return 0;
- }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: iostream.h и ctype.h
- Определяется функция с именем ch_remove, которая принимает два аргумента: указатель на строку и функцию-предикат.
- Внутри функции ch_remove объявляются две переменные: p1 и p2, которые будут использоваться в цикле.
- Инициализируются значения p1 и p2, где p1 указывает на первый символ строки, а p2 - на второй.
- Запускается цикл, который будет выполняться до тех пор, пока есть символы в строке.
- Внутри цикла проверяется, является ли текущий символ буквой. Если нет, то он удаляется из строки, инициализируя p1 следующим символом.
- После цикла возвращается исходная строка.
- Определяется статическая функция cmp, которая принимает указатель на строку и возвращает значение, определяющее, является ли символ буквой или пробелом.
- В функции cmp проверяется, является ли текущий символ буквой или пробелом. Если нет, то возвращается значение, которое позволяет функции ch_remove удалить этот символ.
- В функции main определяется строка s, которая содержит набор символов для обработки.
- Вызывается функция ch_remove, передавая ей в качестве аргументов строку s и функцию cmp.
- Выводится результат работы функции ch_remove.
- Функция main возвращает 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д