Напечатать все слова из предложения, содержащие более 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) только те слова, которые содержат шесть или более букв. Список действий, которые происходят в коде:

  1. #include Включает в программу функции файла стандартного ввода/вывода, которые позволяют программе работать с консолью.
  2. #include Включает в программу функции файла ctype.h, которые позволяют программе работать с буквами и символами.
  3. void out_in_words(FILE _out, FILE _in) { Определяет функцию с именем out_in_words, которая принимает два аргумента типа FILE*. Эти аргументы используются для работы с потоками ввода/вывода.
  4. int c, i; Объявляет две переменные типа int, которые будут использоваться в цикле. Переменная c будет использоваться для хранения текущего символа, а переменная i будет использоваться для подсчета количества букв в слове.
  5. *char s[8], p = &s[0];** Объявляет массив s типа char на 8 символов и указатель p, который указывает на первый элемент массива s.
  6. i = 0; Инициализирует переменную i значением 0.
  7. while(((c = fgetc(_in)) != EOF) && !ferror(_in)){ Начинает цикл while, который будет выполняться до тех пор, пока не достигнется конец файла (EOF) и не возникнет ошибка чтения файла.
  8. if(isalpha(c)){ Проверяет, является ли текущий символ буквой.
  9. if(i < 6){ Если текущий символ является буквой и переменная i содержит значение меньше 6, то...
  10. *p++ = c; Добавляет текущий символ в массив s и увеличивает значение указателя p на 1.
  11. if(++i == 6){ Если значение переменной i стало равным 6, то...
  12. *p = '\0'; Устанавливает нулевой символ в конце строки в массиве s.
  13. fprintf(_out, %s, s); Выводит содержимое массива s на стандартный вывод.
  14. } Конец условия if для переменной i.
  15. } else { Если текущий символ не является буквой или значение переменной i больше или равно 6, то...
  16. fputc(c, _out); Выводит текущий символ на стандартный вывод.
  17. if(c == '\n') Если текущий символ является символом новой строки (символом \n), то...
  18. break; Прерывает цикл while.
  19. } Конец условия if для символа новой строки.
  20. if(c == '\n') Если текущий символ является символом новой строки (символом \n), то...
  21. fputc('\n', _out); Выводит символ новой строки на стандартный вывод.
  22. i = 0; Устанавливает значение переменной i равным 0.
  23. p = &s[0]; Устанавливает указатель p на первый элемент массива s.
  24. } Конец цикла while.
  25. int main(void){ Определяет функцию main, которая не принимает аргументов.
  26. out_in_words(stdout, stdin); Вызывает функцию out_in_words, передавая ей аргументы stdout (стандартный вывод) и stdin (стандартный ввод).
  27. return 0; Завершает программу и возвращает значение 0. Код, представленный в этом списке, выполняет задачу, указанную в вопросе - он выводит на стандартный вывод все слова из ввода, которые содержат шесть или более букв.

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

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