Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C] Вывод самого длинного слова в файле

12K
22 февраля 2007 года
Lyalya_ua
25 / / 24.11.2006
Моя программа создает файл, записывает туда строку симоволов. Пробелы между символами заминяtn на кому, переход на новую строку - ; и конец файла обозначает точкою.
Функция в программе вычисляет позицию самого длинного слова в файле.
Теперь вопрос - как сразу же без допольнительного цыкла высчитывания дллины вывести самое длинное слово с помощью fseek (fp,0,max_n), ставши на позицию самого длинного слова.
Проблемный момент обозначен ******.
:confused: :confused: :confused:
Большое спасибо!
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>

int count_char(const char* fileName);

void main(void)
{

 clrscr();                                        //clearing the screen
 char fileName[20];                 //declaring the variables
 char string[200];
 char word;
 int pos [200];
 int i, max_n=1, count=0 ;


printf ("Please enter the name of the file:\n");
gets (fileName);
strcat(fileName,".txt");
const char *fileName1=fileName;                 //creating the file with txt attribute

FILE *fp;                                           //opening the file for writing
if ((fp=fopen(fileName1,"w+"))==NULL)
 {
  printf("Unable to open the file.\n");
  getch();
  return;
 }

printf ("Please enter the information to the file, after - press Esc\n");

do
  {
   word=getche();
   if (word==' ') word=',';                 //words are separated with a comma
   if (word=='\r')                      //lines are separated with a semicolon
   {word = ';';putc ('\n',stdout);}             //in case of pressing enter - go to the next string
   if  (word!=0x1B) putc (word,fp);
 }
while (word!=0x1B);                         //do the transformation until Esc is not pressed
putc('.',fp);                                   //end of file designated by point
fclose (fp);
printf("\n");
max_n=count_char(fileName);
printf("Position of the largest word is %d\n",max_n);

fp=fopen (fileName,"r");                            //opening the file for reading from it
if (fp==NULL)
  { printf("\n Unable to open the file!\n");
    getch();
    return;
  }
******
fseek(fp,0,max_n);
word=fgetc(fp);
do
{
putc(word,stdout);
word=fgetc(fp);
}while (word!='.');
//string=fgetc(fp);
*******8
printf ("\nThe longest word in the text is the %s\n",string);

fclose(fp);
printf ("Press any key to exit\n");
getch();
}

int count_char(const char* fileName)                //subroutine for returning the position of the longest word in a file
{
FILE *fp;                                               //file pointer
char word;
int pos[200], count=0, max=1, max_n=1, i;

fp=fopen(fileName,"r");                             //checking the ability to open the file
if (fp==NULL)
 {
  printf ("Unable to open the file\n");
  getch();
  return 0;
 }

fseek(fp,0,0);                                      //reposition of the file pointer of the stream
pos[count]=0;
while (word!='.')
 {
  word=fgetc(fp);                                       //reading the character from a file
  if (word==','||word==';'||word=='.')
   {count++;
    pos[count]=ftell(fp);
 }
}
for (i=0;i<=count;i++)
 if (max<pos[i+1]-pos)                              //calculating the longest word
  {                         //as the difference of the positions of the words
   max=pos[i+1]-pos-1;
   max_n=pos;
  }
fclose(fp);
return max_n;                                           //returning the position of the longest word to the main program
}
24K
22 февраля 2007 года
Nucleu$
3 / / 22.02.2007
мда, попробуй высчитать длину этого самого длинного слова(n), передвинь курсор на начало и считай n байт блоковым воодом/выводом, думаю - поможед!
242
23 февраля 2007 года
Оlga
2.2K / / 04.02.2006
fseek
должно быть так:
 
Код:
max_n=count_char(fileName);
fseek(fp,max_n,SEEK_SET); //устанавливаешь курсор на начало слова
12K
23 февраля 2007 года
Lyalya_ua
25 / / 24.11.2006
Благодарю! Действительно - все получилось ;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог