Пример #1
0
void inserir_palavra(Parvore *node, int size, char *palavra){

	int i;

	if(*node == NULL){
		*node = (Arvore *)malloc(sizeof(Arvore));
		for(i = 0; i < TAMANHO; i++)
			(*node)->v[i] = NULL;
		if(palavra[0] != '\0'){
			inserir_palavra(&(*node)->v[palavra[0] - 'a'], size, palavra + 1);
			(*node)->flag = 0;
		}
		else{
			(*node)->flag = 1;
			(*node)->palavra = malloc(size);
			strcpy((*node)->palavra, palavra - size);
		}
	}
	else{
		if(palavra[0] != '\0'){
			inserir_palavra(&(*node)->v[palavra[0] - 'a'], size, palavra + 1);
		}
		else{
			(*node)->flag = 1;
			(*node)->palavra = malloc(size);
			strcpy((*node)->palavra, palavra - size);
		}
	}
}
Пример #2
0
/* ler, gravar os dados do arquivo a uma lista de palavras
*
*@param Char const *nome_arq -  referencia do arquivo a ser lido
*
*@return Struct Lista_palavras - retorna uma  nova lista de palavras 
*/
struct lista_palavras *
carregar_palavras(char const * nome_arq) {
    // Abre um arquivo para leitura
    FILE * arq = fopen(nome_arq, "r");
    if (arq == NULL) {
        printf("O arquivo indicado não pode ser aberto.\n");
        exit(!0);
    }
    
    // Le quantas palavras há no arquivo aberto
    unsigned int num_palavras;
    if (fscanf(arq, "%u\n", &num_palavras) == 0) {
        printf("Erro ao ler quantidade de palavras no arquivo.\n");
        exit(!0);
    }
    
    // Cria uma nova lista de palavras
    struct lista_palavras * lista = nova_lista(num_palavras);
    
    for (int i = 0; i < num_palavras && feof(arq) == 0; i++) {
        const int tam_max_palavra = 100;
        char palavra[tam_max_palavra];

/*exercicio 4 ->adicionado */
	char *palavras;	

        palavras = fgets(palavra,tam_max_palavra,arq);
	palavras[strlen(palavra) -1] = '\0';
/*exercico4 */

       /* if(fscanf(arq, "%s\n",palavra) == 0) {
            printf("Erro ao ler a proxima palavra do arquivo %s.\n",palavra);
            liberar_lista_palavras(lista);
            exit(!0);
        }*/
        inserir_palavra(lista,palavra);
    }
  
    return lista;
}
Пример #3
0
int main(int argc, char *argv[]){
	
	FILE *arquivo1, *arquivo2;
	Parvore arvore;
	PLista lista, lista2, lista3, p, z, y;

	char carac_text, carac_dicio;
	char word[2000000];
	char word_text[2000000];
	char other_word[2000000];
	int i = 0, tam = 0, j = 0, lines = 1, k;

	inicializaArvore(&arvore);
	inicializaLista(&lista);
	inicializaLista(&lista2);
	inicializaLista(&lista3);

	arquivo1 = fopen(argv[1], "r");
	arquivo2 = fopen(argv[2], "r");


	//PEGANDO TODAS AS PALAVRAS DO DICIONARIO E INSERINDO NA ARVORE TRIE
	while((carac_dicio = fgetc(arquivo1)) != EOF){

		if(carac_dicio != '\n'){
			word[i] = carac_dicio;
			i++;
		}
		else{
			word[i] = '\0';
			i = 0;
			inserir_palavra(&arvore, strlen(word), word);
		}
	}


	//LENDO E TRATANDO TODOS OS CARACTERES DO ARQUIVO2
	while((carac_text = fgetc(arquivo2)) != EOF)
		tam++;

	//criando string com todo o conteudo do texto
	char string[tam];
	rewind(arquivo2);
	i = 0;
	while((carac_text = fgetc(arquivo2)) != EOF){
		string[i] = carac_text;
		i++;
	}
	string[i] = '\0'; //o texto todo esta nessa string
	i = 0;

	for(j = 0; j < tam; j++){

		if((seekChar(separadores,string[j])) && (i == 0)){
			//j++;
			continue;
		}
		if(seekChar(separadores, string[j])){

			word_text[i] = '\0';
			strcpy(other_word,word_text);
			i = 0;

			for(k = 0; k < strlen(word_text); k++)
				word_text[k] = tolower(word_text[k]);

			if(buscar_palavra(arvore, word_text) == 1){
				inserir_crescente(&lista, word_text);
			}
			else{
				inserir_final(&lista2, other_word);
			}
		}
		else{
			word_text[i] = string[j];
			i++;
		}
	}

	i = 0;
	for(p = lista; (p != NULL); p = p->prox){
		int aux = 1;
		int number;

		printf("%s", p->palavra);
		for(j = 0; j < tam; j++){

			if(seekChar(separadores, string[j])){
				word_text[i] = '\0';
				i = 0;

				for(k = 0; k < strlen(word_text); k++)
					word_text[k] = tolower(word_text[k]);

				if((strcmp(word_text,p->palavra)) == 0){

					if (lines != number){
						if(aux == 1){
								printf(" %d", lines);
								number = lines;

						}
						else{
								printf(", %d", lines);
								number = lines;

						}
					aux = 0;
					}
				}

				if(string[j] == '\n'){
					lines++;
					number = lines-1;
				}

			}
			else{
				word_text[i] = string[j];
				i++;
			}
		}
		printf("\n");
		lines = 1;
	}
	//imprimir(lista2);
	for(z = lista2; (z != NULL); z = z->prox){
		printf("%s ", z->palavra);
		//for(y = lista3; (y != NULL); y = y->prox){
			buscarMenor(arvore, z->palavra);
			printf("%s\n", menorpalavra);
			menorpalavra[0] = '\0';
			menor = 100;

	}
}