Здравствуйте.
Прошу помощи в решении задачи следующего типа. Дан файл в нём записаны строки, надо содержимое файла разбить на слова и записать и каждое слово за писать в послеодовательность списокв, т.е. одно слово в один список... списки идут друг за другом. потом из этих списко вывести собственно эти слова.
Заранее благодарю
Друзья, очень прошу обратьи внимание на мою задачу... горю с ней...
Очень прошу помочь....
вот что то пытался сделать да толкьо даже разбиение то толковое не вышло...помоигет плз..
#include <stdio.h>
#include "filework.h"
int main(int argc, char *argv[])
{
FILE *stream;
char s[256],g[256];
int i=0;
if( (stream = fopen( "input.txt", "r" )) != NULL )
{
while(!feof(stream))
{
if( fgets( s, 256, stream ) == NULL)
break;
else
while(s[i])
{
while(s[i]!=0 && !isalnum(s[i]))
i++;
if (s[i] == 0)
break;
while(s[i]!=0 && isalnum(s[i]))
{
g[i]=s[i];
i++;
}
printf("%s",g);
i=0;
}
}
fclose(stream);
}
return 0;
Ну, тебе же уже написали:
http://forum.pascal.net.ru/index.php?showtopic=13695
Так вот сложности с понимнием. Значит вот написал примерно для этого задания зацените[quote]
#ifndef hea_h
#define hea_h
struct Words{
Words *next;
char *str;
};
Words *mk_list(Words *head, char *masstr, int size);
void Scan(Words *head);
void Del(Words *head);
#endif
____________________________
#include <stdio.h>
#include <stdlib.h>
#include "head6.h"
Words *mk_list(Words *head, char *masstr, int size)
{
int i;
char *t;
Words *el;
t=(char*)malloc(size+1);
for (i=0;i<size;i++)
t[i]=masstr[i];
t[i]=0;
el=(Words*)malloc(sizeof(Words));
el->str = t;
el->next = head;
return el;
}
void Scan(Words *head)
{
Words *p=head;
while (p!=NULL)
{
printf("%s\n",p->str);
p=p->next;
}
}
void Del(Words *head)
{
Words *p;
while (head!=NULL)
{
p=head->next;
free(head);
head=p;
}
}
_______________________________________
#define fget(f,x) fread(&x,sizeof(x),1,f)
#define fput(f,x) fwrite(&x,sizeof(x),1,f)
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include "hea.h"
#define BUFLEN 1024
int main(int argc, char *argv[])
{
FILE *fi;
int flag,i,start;
Words *head = NULL;
Words *p;
char str[BUFLEN];
fi = fopen( (argc<2) ? "H:/1.txt" : argv[1], "rt" );
if (fi == NULL) printf("Not found the file");
flag=0;
while (!feof(fi))
{
str[0] = 0;
fgets(str,BUFLEN,fi);
str[BUFLEN-1]=0;
i=0;
while (str[i]!=0)
{
while(str[i] && isspace(str[i]))
i++;
start=i;
while(str[i] && !isspace(str[i]))
i++;
if (start<i)
head=mk_list(head, &str[start], i-start);
}
}
Scan(head);
if (fi)
fclose(fi);
Del(head);
return 0;
}
Ну я примерно чёт понял, но таки не всё получается, вот что понял то выше приведено и работает, а вот как зделать дерево не знаю но просто не получается и всё.... помогите моий исходник для списка преобразовать к дереву.... Очень прошу
И про деревья тебе тоже выкладывали:
http://forum.pascal.net.ru/index.php?showtopic=13595
Ты нормальным языком написать можешь, что именно тебе сделать надо? С такой постановкой:
Надо сделать так что бы каждое слово было в одном списке, а сами списки были реализованы в виде бинврного дерева поиска (збалансированного) вот, т.е.
есть в файле такая тема:
qwer rty
zxcvbn
asdyui uio
ну вот скажем вверх дерева
zxcvbn
qwer asdyui
rty uio
ну вот это и надо, т.е. дерево из слов каждый элемент дерева содержит по одному слову, и оно организовано так что бы быть збалансированным