Считать текст из файла и вывести на экран все слова с максимальной длиной - C (СИ)
Формулировка задачи:
Напишите программу, которая считывает текст из файла и выводит на экран все слова, с максимальной длиной. Необходимо предусмотреть случай, если файла не существует.
Подскажите кто решения или хотя бы идею (нахождение слов с максимальной длинной)
Вот проверка на существование файла и вывод его содержимого на экран:
#include <fstream.h> #include <string.h> #include <stdio.h> #include <conio.h> int main() { char s[1000]; FILE * f; clrscr (); if ((f=fopen("readme.txt", "rt")) == NULL) {cout <<"fail ne najden" ;} do { int Char=fgetc (f); if (Char != EOF) putchar (Char); } while (!feof (f)); getch (); return 0; }
Друзья, помагите пожайлуста!!! Вот я написал кое-что....низнаю даже где и ошибка....Он вообще ничего не выводит кроме длины самого длинного слова. Наверное это потому что когда я первый раз "прошелся по файлу" его надо закрыть, а затем заново открывать...я же не закрывал (а если и закрывал то при выполнение программы она зависала и приходилась нажимать "ctrl+break")
Вот примерный алгоритм: сначала я нашел самое длинное слово (слова)=max.....а затем пробовал заново "пройтись по файлу" и найти и вывести все слова равные длинне max...
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> int main() { clrscr (); FILE *f; int max; char *e; char s[255]; int k,d,i,ii; f = fopen("lol.txt", "rt"); if (f==NULL) { printf("Owibka\n"); getch (); return 0; } max=0; ii=0; k=0; d=0; i=0; while(feof(f)==NULL) { e[0]=fgetc(f); if (e[0]!=' ') k++; if (e[0]==' ') { if (k>max) { (max=k); } k=0; } } // fclose (f); // f=fopen ("log.txt","rt"); while(feof(f)==NULL) { e[0]=fgetc(f); i++; s[i]=e[0]; if (e[0]!=' ') {(d++) ; } if ((e[0]==' ') && (d==max)) { ii=i-max; // возращение к началу слова for (int h=ii; h>=i; h++) { printf ("%s",s[h]); d=0; ii=0; } } } fclose(f); cout<<max; getch(); return 0; }
Решение задачи: «Считать текст из файла и вывести на экран все слова с максимальной длиной»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #include <iostream.h> int main() { clrscr (); int ggg; FILE *f; int max; char *e; char s[255]; int k,d,i,ii,m,h; f = fopen("readme.txt", "rt"); if (f==NULL) { printf("Owibka\n"); getch (); return 0; } cout<<"Samye dlinnye slova:\n"; max=0; ii=0; k=0; m=0; d=0; i=0; while(feof(f)==NULL) { e[0]=fgetc(f); if (e[0]!=' ') k++; if (e[0]==' ') { if (k>max) { (max=k); } k=0; } } fseek (f,0,SEEK_SET); while(feof(f)==NULL) { e[0]=fgetc(f); s[i]=e[0]; if (e[0]!=' ') (d++) ; if (e[0]==' ') { if (d==max) { ii=i-max; m=i; for (h=ii; h<=m; h++) { printf ("%c",s[h]); } ii=0; d=0; } else d=0; } i++; } fclose (f); getch(); return 0; }
Объяснение кода листинга программы
В этом коде считывается текст из файла и выводятся на экран все слова с максимальной длиной. Вот список действий, которые выполняются в коде:
- Включаются необходимые заголовочные файлы:
stdio.h
для работы с стандартными вводом/выводомconio.h
для работы с функциейgetch()
, которая используется для приостановки выполнения программы до нажатия клавишиstdlib.h
для работы с функциейatoi()
, которая преобразует строку в целое числоstring.h
для работы со строкамиiostream.h
для работы с объектами ввода/вывода
- Считывается текст из файла:
fopen()
открывает файл для чтения- Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается
- Файл считывается в память
- Находится самое длинное слово:
- Переменная
max
инициализируется нулем, что означает, что самое длинное слово еще не найдено - Переменная
k
отслеживает количество символов в текущем слове - Если текущий символ не является пробелом, увеличивается
k
- Когда встречается пробел, проверяется, является ли текущее слово самым длинным
- Если да, то значение
max
обновляется значениемk
- Значение
k
сбрасывается в ноль для следующего слова
- Переменная
- Выводятся самые длинные слова:
- Переменная
d
отслеживает количество символов в текущем слове - Переменная
i
отслеживает индекс текущего слова в массиве - Если текущий символ не является пробелом, увеличивается
d
- Когда встречается пробел, проверяется, является ли текущее слово самым длинным
- Если да, то слово выводится на экран
- Значение
d
сбрасывается в ноль для следующего слова - Значение
i
сбрасывается в ноль после вывода всех слов
- Переменная
- Закрывается файл и программа завершается:
- Вызывается функция
fclose()
, чтобы закрыть файл - Вызывается функция
getch()
, чтобы приостановить выполнение программы до нажатия клавиши - Программа возвращает ноль, что означает успешное завершение
- Вызывается функция
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д