Найти самое короткое и самое длинное слова в тексте - C (СИ)

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

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

В файле(file.txt) задан текст. Нужно найти самое короткое и самое длинное слова в тексте, вывести их на экран, затем записать их в этот же файл, только поменяв местами. Помогите пожалуйста...

Решение задачи: «Найти самое короткое и самое длинное слова в тексте»

textual
Листинг программы
#include <stdio.h>
 
 
int main(void)
{
    FILE *ptr_file;
    char ch;        // читаемый символ из файла
    int length_word;    // длина слова (набра ascii символов состоящих только из букв без пробелов и тире)
    int max_length;     // максимальная длина слова
    int begin_word; // флаг начала слова
    int seek_max_word;  // смещение от начала файла, максимально длинного слова
    int i;
 
    ptr_file=fopen("data.txt","r");
    if(ptr_file == NULL)
       {
          perror("Error in opening file");
          return(-1);
       }
 
    length_word = seek_max_word = max_length = 0;
 
    while (!(feof(ptr_file)) )
       {
 
        ch=fgetc(ptr_file);
 
            if( ((ch >= 'A')&&(ch <= 'Z')) || ((ch >= 'a')&&(ch <= 'z')) )  // проверка начала слова и установка или сброс флага
            begin_word = 1;
            else
            begin_word = 0;
 
            if(begin_word)      // если слово началось, то считаем сивволы
            length_word+=1;
            else if((begin_word == 0)&&(length_word != 0)&&(length_word >= max_length))   // будет найдено посленее слово максимальной длины
            {           // если слово закончилось, то сохраняем его длину и смекщение в файле
              max_length = length_word;
              seek_max_word = ftell(ptr_file) - max_length - 1;
              length_word = 0;
            }
            else
            length_word = 0;
 
       }
 
    fseek(ptr_file, seek_max_word, SEEK_SET);   // устанавливаем нужное смещение
 
    for(i = 0; i < max_length; i++)     // читаем нужное слово по символам
    printf("%c", fgetc(ptr_file));
 
 
    fclose(ptr_file);
 
    printf(" <--- max length of word is %d", max_length);  // выводим длинну максимального слова
 
    return (0);
}

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

В этом коде:

  1. Начинается с подключения заголовочного файла stdio.h, который содержит функции для ввода и вывода данных в консоль.
  2. Создается функция main(), которая является точкой входа в программу.
  3. Внутри функции main() создается указатель на файл, который будет использоваться для чтения данных из файла data.txt.
  4. Проверяется, удалось ли открыть файл. Если нет, выводится сообщение об ошибке и функция main() завершается с кодом ошибки -1.
  5. Переменные length_word, seek_max_word и max_length инициализируются нулевыми значениями.
  6. Запускается цикл while, который будет выполняться до тех пор, пока не будет достигнут конец файла (feof(ptr_file)).
  7. Внутри цикла while считывается каждый символ из файла с помощью функции fgetc(ptr_file).
  8. Проверяется, является ли текущий символ буквой (от 'A' до 'Z' или от 'a' до 'z'). Если да, то устанавливается флаг begin_word, указывающий на начало нового слова.
  9. Если флаг begin_word установлен, то увеличивается счетчик length_word.
  10. Если флаг begin_word сброшен, но длина текущего слова больше максимальной длины (max_length), то обновляется максимальная длина и смещение от начала файла (seek_max_word) последнего максимального слова.
  11. Если флаг begin_word сброшен и длина текущего слова равна нулю, то текущее слово считается законченным и его длина и смещение от начала файла сохраняются.
  12. Если флаг begin_word сброшен и длина текущего слова не равна нулю, то его длина сбрасывается до нуля.
  13. После завершения цикла while, программа возвращает управление в начало файла с помощью функции fseek(ptr_file, seek_max_word, SEEK_SET).
  14. Запускается цикл for, который выводит символы максимального слова, считанные с помощью функции fgetc(ptr_file).
  15. Функция fclose(ptr_file) закрывает файл.
  16. Выводится сообщение с длинной максимального слова.
  17. Функция main() завершается с кодом 0, указывающим на успешное выполнение программы.

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


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

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

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