Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 17:11   #1
alexandr017
 
Регистрация: 28.03.2011
Сообщений: 6
По умолчанию Работа с файлами

Напишите программу, которая считывает текст из файла и выводит на экран все слова, с максимальной длиной. Необходимо предусмотреть случай, если файла не существует.

Подскажите кто решения или хотя бы идею (нахождение слов с максимальной длинной)

Вот проверка на существование файла и вывов его содержимого на экран:

#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;
}
alexandr017 вне форума Ответить с цитированием
Старый 12.02.2012, 17:48   #2
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию

Проверка двумя способами если не путаю
1.
Код:
if(файловый_поток.fail())
               {
                 cout<<"error"
                }
2.
Код:
if(!файловый_поток)
               {
                 cout<<"error"
                }
F1nt вне форума Ответить с цитированием
Старый 12.02.2012, 18:48   #3
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Не совсем понял что именно нужно. Вот прога которая открывает текстовый файл и выводит его на экран:

Код:
#include "stdafx.h"
#include <locale>
#include <iostream>

using namespace std;


int main(int argc, char* argv[])
{
	setlocale(LC_ALL, "Russian");

	FILE* file;
	char* Text;
	int fSize;

	if (fopen_s(&file, "Text.txt", "r"))
	{
		cout<<"Не могу открыть файл Text.txt\n";
		getchar();
		return -1;
	}

	fseek(file, 0, SEEK_END);
	fSize = ftell(file);
	fseek(file, 0, SEEK_SET);

	Text = new char[fSize];
	memset(Text, 0, fSize);
	fread(Text, 1, fSize, file);

	cout<<Text<<endl;

	delete[] Text;

	getchar();
	return 0;
}
crymchanin вне форума Ответить с цитированием
Старый 12.02.2012, 19:53   #4
alexandr017
 
Регистрация: 28.03.2011
Сообщений: 6
По умолчанию

Не....мне надо вывести не все слова а только самые длинные......


Вот я написал кое-что....низнаю даже где и ошибка....Он вообще ничего не выводит кроме длины самого длинного слова. Наверное это потому что когда я первый раз "прошелся по файлу" его надо закрыть, а затем заново открывать...я же не закрывал (а если и закрывал то при выполнение программы она зависала и приходилась нажимать "ctrl+break")

Вот примерный алгоритм: сначала я нашел самое длинное слово (слова)=max.....а затем пробовал заново "пройтись по файлу" и найти и вывести все слова равные длинне max...
[C]#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;
}[/C]
alexandr017 вне форума Ответить с цитированием
Старый 12.02.2012, 21:38   #5
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
Не....мне надо вывести не все слова а только самые длинные......
Самые длинные начиная от какого размера?

Цитата:
его надо закрыть, а затем заново открывать...
Для этого есть функция fseek(FILE* _File, long _Offset, int _Origin) :
_File - сам файл
_Offset - смещение (байт)
_Origin - флаг

Дефинионы для _Origin:
SEEK_SET - установить по значению _Offset
SEEK_CUR - установить начиная с текущего положения
SEEK_END - установить в конец
crymchanin вне форума Ответить с цитированием
Старый 19.02.2012, 16:35   #6
alexandr017
 
Регистрация: 28.03.2011
Сообщений: 6
По умолчанию

Решил всё-таки доделать задачу до конца...вот код, может кому-нить пригодиться....:


#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;
}
alexandr017 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами в С++ Вячеслав1977 Помощь студентам 0 11.10.2011 08:45
работа с файлами на с++ fireridlle Помощь студентам 3 09.02.2011 14:06
Работа с файлами Kazik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.05.2010 11:12
Работа с файлами Dim@ Помощь студентам 1 26.12.2007 22:43