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