Найти самое короткое и самое длинное слова в тексте - 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);
- }
Объяснение кода листинга программы
В этом коде:
- Начинается с подключения заголовочного файла stdio.h, который содержит функции для ввода и вывода данных в консоль.
- Создается функция main(), которая является точкой входа в программу.
- Внутри функции main() создается указатель на файл, который будет использоваться для чтения данных из файла data.txt.
- Проверяется, удалось ли открыть файл. Если нет, выводится сообщение об ошибке и функция main() завершается с кодом ошибки -1.
- Переменные length_word, seek_max_word и max_length инициализируются нулевыми значениями.
- Запускается цикл while, который будет выполняться до тех пор, пока не будет достигнут конец файла (feof(ptr_file)).
- Внутри цикла while считывается каждый символ из файла с помощью функции fgetc(ptr_file).
- Проверяется, является ли текущий символ буквой (от 'A' до 'Z' или от 'a' до 'z'). Если да, то устанавливается флаг begin_word, указывающий на начало нового слова.
- Если флаг begin_word установлен, то увеличивается счетчик length_word.
- Если флаг begin_word сброшен, но длина текущего слова больше максимальной длины (max_length), то обновляется максимальная длина и смещение от начала файла (seek_max_word) последнего максимального слова.
- Если флаг begin_word сброшен и длина текущего слова равна нулю, то текущее слово считается законченным и его длина и смещение от начала файла сохраняются.
- Если флаг begin_word сброшен и длина текущего слова не равна нулю, то его длина сбрасывается до нуля.
- После завершения цикла while, программа возвращает управление в начало файла с помощью функции fseek(ptr_file, seek_max_word, SEEK_SET).
- Запускается цикл for, который выводит символы максимального слова, считанные с помощью функции fgetc(ptr_file).
- Функция fclose(ptr_file) закрывает файл.
- Выводится сообщение с длинной максимального слова.
- Функция main() завершается с кодом 0, указывающим на успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д