#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
}
[C] Вывод самого длинного слова в файле
Функция в программе вычисляет позицию самого длинного слова в файле.
Теперь вопрос - как сразу же без допольнительного цыкла высчитывания дллины вывести самое длинное слово с помощью fseek (fp,0,max_n), ставши на позицию самого длинного слова.
Проблемный момент обозначен ******.
:confused: :confused: :confused:
Большое спасибо!
Код:
мда, попробуй высчитать длину этого самого длинного слова(n), передвинь курсор на начало и считай n байт блоковым воодом/выводом, думаю - поможед!
fseek
должно быть так:
должно быть так:
Код:
max_n=count_char(fileName);
fseek(fp,max_n,SEEK_SET); //устанавливаешь курсор на начало слова
fseek(fp,max_n,SEEK_SET); //устанавливаешь курсор на начало слова
Благодарю! Действительно - все получилось ;)