Считать текст из файла и вывести на экран все слова с максимальной длиной - 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(), чтобы приостановить выполнение программы до нажатия клавиши - Программа возвращает ноль, что означает успешное завершение
- Вызывается функция