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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
void output_w(FILE* _out, const char* s, const char* pfx){
    const char*  p = s;
    const size_t n = strlen(pfx);
 
    while((p = strstr(p, pfx)) != NULL){
        if((p == s) || ! isalpha(*(p - 1))){
            if(! strncmp(p, pfx, n)){
 
                while(isalpha(*p))
                    fputc(*p++, _out);
 
                fputc('\n', _out);
                continue;
            }
        }
        p += n;
    }
}
 
int main(void){
    char buf[64] = "hello, apply, apple, application, ap";
    char pfx[16] = "app";
/*
    printf("Enter str: ");
    fgets(buf, sizeof(buf), stdin);
    printf("Enter prefix: ");
    scanf("%s", pfx);
    fflush(stdin);
*/
    output_w(stdout, buf, pfx);
    return 0;
}

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

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

  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
Похожие ответы