Вывести список слов, имеющих приставку (несколько букв), задаваемую с клавиатуры - C (СИ)

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

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

Текст вводится с клавиатуры в строку, слова разделены пробелом или запятой. Нужно вывести список слов, имеющих приставку (несколько букв), задаваемую с клавиатуры.

Решение задачи: «Вывести список слов, имеющих приставку (несколько букв), задаваемую с клавиатуры»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. void output_w(FILE* _out, const char* s, const char* pfx){
  6.     const char*  p = s;
  7.     const size_t n = strlen(pfx);
  8.  
  9.     while((p = strstr(p, pfx)) != NULL){
  10.         if((p == s) || ! isalpha(*(p - 1))){
  11.             if(! strncmp(p, pfx, n)){
  12.  
  13.                 while(isalpha(*p))
  14.                     fputc(*p++, _out);
  15.  
  16.                 fputc('\n', _out);
  17.                 continue;
  18.             }
  19.         }
  20.         p += n;
  21.     }
  22. }
  23.  
  24. int main(void){
  25.     char buf[64] = "hello, apply, apple, application, ap";
  26.     char pfx[16] = "app";
  27. /*
  28.     printf("Enter str: ");
  29.     fgets(buf, sizeof(buf), stdin);
  30.     printf("Enter prefix: ");
  31.     scanf("%s", pfx);
  32.     fflush(stdin);
  33. */
  34.     output_w(stdout, buf, pfx);
  35.     return 0;
  36. }

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

В этом коде реализована функция вывода слов, начинающихся с заданной приставки. Список элементов кода:

  1. #include Включает в себя файл стандартного ввода/вывода, который содержит определения функций для работы с консолью.
  2. #include Включает в себя файл с функциями для работы со строками, такими как проверка на цифры или буквы.
  3. #include Включает в себя файл со стандартными функциями для работы со строками, такими как функция сравнения строк.
  4. *void output_w(FILE _out, const char s, const char pfx)** Это функция, которая принимает три аргумента: файл для вывода, строку для обработки и строку-приставку.
  5. *const char p = s;** Здесь p - это указатель на первый символ строки s.
  6. const size_t n = strlen(pfx); Здесь n - это длина строки-приставки.
  7. while((p = strstr(p, pfx)) != NULL){ Этот цикл будет выполняться до тех пор, пока не найдется null-терминатор в строке s или пока не будет найдена последовательность символов, соответствующая строке-приставке.
  8. *if((p == s) || ! isalpha((p - 1))){** Этот блок условий проверяет, является ли текущий символ буквой, и если нет, то пропускает его.
  9. if(! strncmp(p, pfx, n)){ Этот блок условий проверяет, совпадает ли последовательность символов с строкой-приставкой.
  10. *while(isalpha(p))** Этот цикл будет выполняться до тех пор, пока текущий символ не перестанет быть буквой.
  11. *fputc(p++, _out);** Здесь выводится текущий символ.
  12. fputc('\n', _out); После вывода слова выводится символ новой строки.
  13. continue; После вывода слова программа возвращается к началу цикла, чтобы проверить следующее слово.
  14. } Завершается блок условий для проверки строки-приставки.
  15. p += n; Указатель p сдвигается на длину строки-приставки.
  16. } Завершается цикл while.
  17. int main(void){ Это функция, которая не принимает аргументов и представляет собой точку входа в программу.
  18. char buf[64] = hello, apply, apple, application, ap; Здесь определена строка, которую нужно обработать.
  19. char pfx[16] = app; Здесь определена строка-приставка.
  20. printf(Enter str:); Выводится приглашение для ввода строки.
  21. fflush(stdin); Очищается буфер ввода, чтобы можно было ввести следующую строку.
  22. fgets(buf, sizeof(buf), stdin); Вводится строка с клавиатуры.
  23. printf(Enter prefix:); Выводится приглашение для ввода строки-приставки.
  24. scanf(%s, pfx); Вводится строка-приставка с клавиатуры.
  25. output_w(stdout, buf, pfx); Вызывается функция вывода с введенными данными.
  26. return 0; Завершается функция main.

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


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

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

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы