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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3.  
  4. int main(void)
  5. {
  6.     FILE *ptr_file;
  7.     char ch;        // читаемый символ из файла
  8.     int length_word;    // длина слова (набра ascii символов состоящих только из букв без пробелов и тире)
  9.     int max_length;     // максимальная длина слова
  10.     int begin_word; // флаг начала слова
  11.     int seek_max_word;  // смещение от начала файла, максимально длинного слова
  12.     int i;
  13.  
  14.     ptr_file=fopen("data.txt","r");
  15.     if(ptr_file == NULL)
  16.        {
  17.           perror("Error in opening file");
  18.           return(-1);
  19.        }
  20.  
  21.     length_word = seek_max_word = max_length = 0;
  22.  
  23.     while (!(feof(ptr_file)) )
  24.        {
  25.  
  26.         ch=fgetc(ptr_file);
  27.  
  28.             if( ((ch >= 'A')&&(ch <= 'Z')) || ((ch >= 'a')&&(ch <= 'z')) )  // проверка начала слова и установка или сброс флага
  29.             begin_word = 1;
  30.             else
  31.             begin_word = 0;
  32.  
  33.             if(begin_word)      // если слово началось, то считаем сивволы
  34.             length_word+=1;
  35.             else if((begin_word == 0)&&(length_word != 0)&&(length_word >= max_length))   // будет найдено посленее слово максимальной длины
  36.             {           // если слово закончилось, то сохраняем его длину и смекщение в файле
  37.               max_length = length_word;
  38.               seek_max_word = ftell(ptr_file) - max_length - 1;
  39.               length_word = 0;
  40.             }
  41.             else
  42.             length_word = 0;
  43.  
  44.        }
  45.  
  46.     fseek(ptr_file, seek_max_word, SEEK_SET);   // устанавливаем нужное смещение
  47.  
  48.     for(i = 0; i < max_length; i++)     // читаем нужное слово по символам
  49.     printf("%c", fgetc(ptr_file));
  50.  
  51.  
  52.     fclose(ptr_file);
  53.  
  54.     printf(" <--- max length of word is %d", max_length);  // выводим длинну максимального слова
  55.  
  56.     return (0);
  57. }

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

В этом коде:

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы