Напечатать все слова из предложения, содержащие более 6 букв - C (СИ)
Формулировка задачи:
С клавиатуры ввести предложения. Напечатать все слова из этого предложения, содержащие более 6 букв ( знаки препинания не учитывать )
Решение задачи: «Напечатать все слова из предложения, содержащие более 6 букв»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> void out_in_words(FILE* _out, FILE* _in){ int c, i; char s[8], *p = &s[0]; i = 0; while(((c = fgetc(_in)) != EOF) && !ferror(_in)){ if(isalpha(c)){ if(i < 6){ *p++ = c; if(++i == 6){ *p = '\0'; fprintf(_out, "%s", s); } } else fputc(c, _out); } else { if(i == 6) fputc('\n', _out); i = 0; p = &s[0]; } if(c == '\n') break; } } int main(void){ out_in_words(stdout, stdin); return 0; }
Объяснение кода листинга программы
В этом коде на языке C представлена программа, которая читает текст из стандартного ввода (stdin) и выводит на стандартный вывод (stdout) только те слова, которые содержат шесть или более букв. Список действий, которые происходят в коде:
- #include
Включает в программу функции файла стандартного ввода/вывода, которые позволяют программе работать с консолью. - #include
Включает в программу функции файла ctype.h, которые позволяют программе работать с буквами и символами. - void out_in_words(FILE _out, FILE _in) { Определяет функцию с именем out_in_words, которая принимает два аргумента типа FILE*. Эти аргументы используются для работы с потоками ввода/вывода.
- int c, i; Объявляет две переменные типа int, которые будут использоваться в цикле. Переменная c будет использоваться для хранения текущего символа, а переменная i будет использоваться для подсчета количества букв в слове.
- *char s[8], p = &s[0];** Объявляет массив s типа char на 8 символов и указатель p, который указывает на первый элемент массива s.
- i = 0; Инициализирует переменную i значением 0.
- while(((c = fgetc(_in)) != EOF) && !ferror(_in)){ Начинает цикл while, который будет выполняться до тех пор, пока не достигнется конец файла (EOF) и не возникнет ошибка чтения файла.
- if(isalpha(c)){ Проверяет, является ли текущий символ буквой.
- if(i < 6){ Если текущий символ является буквой и переменная i содержит значение меньше 6, то...
- *p++ = c; Добавляет текущий символ в массив s и увеличивает значение указателя p на 1.
- if(++i == 6){ Если значение переменной i стало равным 6, то...
- *p = '\0'; Устанавливает нулевой символ в конце строки в массиве s.
- fprintf(_out,
%s
, s); Выводит содержимое массива s на стандартный вывод. - } Конец условия if для переменной i.
- } else { Если текущий символ не является буквой или значение переменной i больше или равно 6, то...
- fputc(c, _out); Выводит текущий символ на стандартный вывод.
- if(c == '\n') Если текущий символ является символом новой строки (символом
\n
), то... - break; Прерывает цикл while.
- } Конец условия if для символа новой строки.
- if(c == '\n') Если текущий символ является символом новой строки (символом
\n
), то... - fputc('\n', _out); Выводит символ новой строки на стандартный вывод.
- i = 0; Устанавливает значение переменной i равным 0.
- p = &s[0]; Устанавливает указатель p на первый элемент массива s.
- } Конец цикла while.
- int main(void){ Определяет функцию main, которая не принимает аргументов.
- out_in_words(stdout, stdin); Вызывает функцию out_in_words, передавая ей аргументы stdout (стандартный вывод) и stdin (стандартный ввод).
- return 0; Завершает программу и возвращает значение 0. Код, представленный в этом списке, выполняет задачу, указанную в вопросе - он выводит на стандартный вывод все слова из ввода, которые содержат шесть или более букв.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д