Tutorial Catia
#include
#include
#include
#include struct node { char letra; int cont; // 0 se não formar uma palavra da raiz até esse nó node * filhos[26]; //NULL quando não houver filho referente à letra
};
struct vetor { char S[51]; int n;
};
typedef struct vetor vetor; typedef struct node node; typedef node * arvore; typedef node * posicao; int posic (char l){/*função que retorna o numero relativo a posicao da letra*/ int aux; aux = l; if (aux='a') aux = aux-'a'; else if(aux='A'){ aux = aux-'A'; } return aux;
}
void inserir (char S[51],arvore A){/*formulando a estrutura de dados*/ int len,i,j,pos; char l; arvore B=A; len = strlen(S); for (i=0;ifilhos[pos]==NULL){ if(l='A') l=l-('A'-'a'); B->filhos[pos]= (node *) malloc (sizeof(node)); B->filhos[pos]->letra=l; B->filhos[pos]->cont=0; for (j=0;jfilhos[pos]->filhos[j]=NULL; } B=B->filhos[pos]; } else { if(B!=A){ B->cont++; B=A; } } } if(B!=A) B->cont++;
}
void escrever (vetor V, arvore A,FILE *saida) { int i,j; if (A!=NULL){ if(A->letra != '0'){ char l; l = A->letra; V.S[V.n] = l; V.n ++; } if(A->cont != 0){ fprintf(saida, "%d ", A->cont); for(i=0; icont = 0; A->letra = '0'; return A;
}
void main(){ int i,x; char l, S[51]; arvore A, n; vetor V; V.n = 0; A = inicArvore(); FILE *entrada; entrada = fopen("entrada.txt","r"); FILE *saida; saida = fopen("saida.txt","w"); x=fscanf(entrada, "%s", &S); while (x>0){ inserir(S,A); x=fscanf (entrada, "%s", &S); } escrever(V,A,saida);