Исходник организовывает дерево символов. Каждый узел которого определяет некоторое слово, составленное из символов, идущих от корня. Функции добавления и поиска получающихся слов.
Код на C++ #include <alloc.h> #include <conio.h> #include <stdio.h> #include <string.h> #include <stdlib.h> struct Tree { struct Tree *parent; struct Tree *bros; struct Tree *child; char simb; }; FILE *str; /* Описание функции */ struct Tree *newTree(void); struct Tree *addSimb(struct Tree *parent, unsigned char ch); struct Tree *FindSimb(struct Tree *parent, unsigned char ch); /*главная функция*/ void main(void) { struct Tree *Beg,*This; unsigned char ch,*slovo; int i; clrscr(); if ((str = fopen("slova.txt", "rt"))==NULL) { perror("Cannot open input file.\n"); return ; } Beg=newTree(); This = Beg; while(!feof(str)) { ch=fgetc(str); if(ch!=0x20) This = addSimb(This,ch); else This = Beg; } do { printf("Введите слово, которое вы хотите добавить в дерево\n"); This = Beg; while ((ch=getche())!=0x1b) { This=addSimb(This,ch); } printf("Слово добавлено. Хотите еще добавить слово?\n нажмите \Д для продолжения\n"); ch=getch(); } while(ch==0x6c||ch==0x4c||ch==0x84||ch==0xa4); do { printf("Введите слово, которое необходимо найти\n"); while ((ch=getche())!=0x1b) { if((This=FindSimb(This,ch))==NULL) { printf("hfhfhfhfh"); break; } } printf("Хотите найти еще одно слово?\n нажмите \Д для продолжения\n"); ch=getch(); } while(ch==0x6c||ch==0x4c||ch==0x84||ch==0xa4); */ } /*Создание корня дерева*/ struct Tree *newTree(void) { struct Tree *var; var=(struct Tree *) calloc (1,sizeof(struct Tree)); if (!var) return (struct Tree *) 0; var->simb =' '; return var; } /*добавить букву*/ struct Tree *addSimb(struct Tree *parent, unsigned char ch) { struct Tree *var,*list; list=(struct Tree *) calloc (1,sizeof(struct Tree)); var=parent; if(var->child) { var=var->child; if(ch==var->simb) return var; else { while(var->bros) { var=var->bros; if(ch==var->simb) return var; } list->parent=parent; list->bros=var; list->simb=ch; return list; } } else { list->parent=parent; parent->child=list; list->simb=ch; return list; } } /*ищет букву у конкретного родителя*/ struct Tree *FindSimb(struct Tree *parent, unsigned char ch) { struct Tree *var; if((var=parent->child)==NULL) return var; do if (var->simb==ch) return var; while ((var=var->bros)!=NULL); return var; }
|