Вывести список слов, имеющих приставку (несколько букв), задаваемую с клавиатуры - 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; }
Объяснение кода листинга программы
В этом коде реализована функция вывода слов, начинающихся с заданной приставки. Список элементов кода:
- #include
Включает в себя файл стандартного ввода/вывода, который содержит определения функций для работы с консолью. - #include
Включает в себя файл с функциями для работы со строками, такими как проверка на цифры или буквы. - #include
Включает в себя файл со стандартными функциями для работы со строками, такими как функция сравнения строк. - *void output_w(FILE _out, const char s, const char pfx)** Это функция, которая принимает три аргумента: файл для вывода, строку для обработки и строку-приставку.
- *const char p = s;** Здесь p - это указатель на первый символ строки s.
- const size_t n = strlen(pfx); Здесь n - это длина строки-приставки.
- while((p = strstr(p, pfx)) != NULL){ Этот цикл будет выполняться до тех пор, пока не найдется null-терминатор в строке s или пока не будет найдена последовательность символов, соответствующая строке-приставке.
- *if((p == s) || ! isalpha((p - 1))){** Этот блок условий проверяет, является ли текущий символ буквой, и если нет, то пропускает его.
- if(! strncmp(p, pfx, n)){ Этот блок условий проверяет, совпадает ли последовательность символов с строкой-приставкой.
- *while(isalpha(p))** Этот цикл будет выполняться до тех пор, пока текущий символ не перестанет быть буквой.
- *fputc(p++, _out);** Здесь выводится текущий символ.
- fputc('\n', _out); После вывода слова выводится символ новой строки.
- continue; После вывода слова программа возвращается к началу цикла, чтобы проверить следующее слово.
- } Завершается блок условий для проверки строки-приставки.
- p += n; Указатель p сдвигается на длину строки-приставки.
- } Завершается цикл while.
- int main(void){ Это функция, которая не принимает аргументов и представляет собой точку входа в программу.
- char buf[64] =
hello, apply, apple, application, ap
; Здесь определена строка, которую нужно обработать. - char pfx[16] =
app
; Здесь определена строка-приставка. - printf(
Enter str:
); Выводится приглашение для ввода строки. - fflush(stdin); Очищается буфер ввода, чтобы можно было ввести следующую строку.
- fgets(buf, sizeof(buf), stdin); Вводится строка с клавиатуры.
- printf(
Enter prefix:
); Выводится приглашение для ввода строки-приставки. - scanf(
%s
, pfx); Вводится строка-приставка с клавиатуры. - output_w(stdout, buf, pfx); Вызывается функция вывода с введенными данными.
- return 0; Завершается функция main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д