Реализовать функцию, удаляющую в строке знаки пунктуации - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Реализовать функцию Compress, удаляющую в строке, переданной в качестве параметров, все символы пунктуации. Функция должна возвращать число удаленных символов. Используя эту функцию, преобразовать N строк, введенных пользователем

Решение задачи: «Реализовать функцию, удаляющую в строке знаки пунктуации»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
int remove_chars(char * str, const char * del) {
    return ( str = strpbrk(str, del) ) ? 1 + remove_chars(memmove(str, str + 1, strlen(str)), del) : 0;
}
 
#define PUNCTS ",.;:!?"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        int r = remove_chars(buf, PUNCTS);
        printf("Result: %s", buf);
        printf("%d chars removed.\n", r);
    }
    
    return 0;
}

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

  1. Подключение необходимых библиотек: iostream.h, string.h
  2. Указание прототипа функции: int remove_chars(char str, const char del)
  3. Внутри функции remove_chars происходит проверка наличия символов из строки del в текущей строке str. Если такие символы есть, то функция перемещает указатель на первый такой символ в строке и рекурсивно вызывает саму себя, передавая в качестве аргументов функцию memmove, которая перемещает символы в строке, и строку del. Если символов из строки del нет, функция возвращает 0.
  4. В функции main происходит считывание строки из стандартного ввода до тех пор, пока не будет введен символ новой строки.
  5. После считывания строки вызывается функция remove_chars, которая удаляет из строки все символы из строки PUNCTS.
  6. Результат выводится на экран.
  7. В конце программы возвращается 0, что означает успешный конец работы программы.

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


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

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

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