Удалить все символы в строке, не являющиеся буквами - 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;
}

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

  1. Включаются необходимые заголовочные файлы: iostream.h и ctype.h
  2. Определяется функция с именем ch_remove, которая принимает два аргумента: указатель на строку и функцию-предикат.
  3. Внутри функции ch_remove объявляются две переменные: p1 и p2, которые будут использоваться в цикле.
  4. Инициализируются значения p1 и p2, где p1 указывает на первый символ строки, а p2 - на второй.
  5. Запускается цикл, который будет выполняться до тех пор, пока есть символы в строке.
  6. Внутри цикла проверяется, является ли текущий символ буквой. Если нет, то он удаляется из строки, инициализируя p1 следующим символом.
  7. После цикла возвращается исходная строка.
  8. Определяется статическая функция cmp, которая принимает указатель на строку и возвращает значение, определяющее, является ли символ буквой или пробелом.
  9. В функции cmp проверяется, является ли текущий символ буквой или пробелом. Если нет, то возвращается значение, которое позволяет функции ch_remove удалить этот символ.
  10. В функции main определяется строка s, которая содержит набор символов для обработки.
  11. Вызывается функция ch_remove, передавая ей в качестве аргументов строку s и функцию cmp.
  12. Выводится результат работы функции ch_remove.
  13. Функция main возвращает 0, что означает успешное завершение работы программы.

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


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

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

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