tarapi Postado Outubro 18, 2015 Denunciar Share Postado Outubro 18, 2015 Boa noite .Estou tentando implementar um codigo em c para implementar a funcao hash abaixo.alguém pode me ajudar?#include <stdio.h>#include <string.h> unsigned hash(char *s){ unsigned hval = 0; while(*s != '\0'){ hval = (hval << 4) + *s; s++; } return(hval);}int stringParaInt(char *string) { int tamanho, primeira, segunda; //Inteiros que representam o tamanho, //o código da primeira letra da string //e o código da segunda letra. tamanho = strlen(string); //Mede o tamanho da string primeira = string[0]; //Obtém o código da primeira letra segunda = string[1]; //Obtém o código da segunda letra int resultado = (tamanho * primeira) + segunda; //Função de transformação return resultado; //Retorna número que representa a string } void main() { int i; char dado[50]; printf("\nDefina o tamanho da tabela: "); scanf("%d", &tamanhoTabela); for (i=0; i<tamanhoTabela; i++) { printf("\nDigite uma palavra qualquer: "); gets(dado); printf("A chave para a tabela (de 0 a %d) é: %d", tamanhoTabela-1, hash(stringParaInt(dado))); } } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Outubro 20, 2015 Denunciar Share Postado Outubro 20, 2015 (editado) Não entendi qual o problema. Sem a especificação do que é necessário implementar, não dá para auxiliar na solução. Por exemplo, retirando a chamada à stringParaInt, o código deveria, ao menos, funcionar.Outra coisa: ler da entrada padrão (stdin) utilizando a função gets não é muito seguro. Veja as seguintes referências, especialmente os exemplos da fgets:http://www.cmaismais.com.br/referencia/cstdio/gets/http://www.cmaismais.com.br/referencia/cstdio/fgets/Abraços. Editado Outubro 20, 2015 por Durub Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tarapi Postado Outubro 20, 2015 Autor Denunciar Share Postado Outubro 20, 2015 preciso fazer um código que implemente a seguinte função hash:unsigned hash(char *s){ unsigned hval = 0; while(*s != '\0'){ hval = (hval << 4) + *s; s++; } return(hval);}implementei um código principal chamando a função hash.mas não consigo botar para rodarObrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Outubro 20, 2015 Denunciar Share Postado Outubro 20, 2015 Se a função hash for apenas essa, retire a chamada à função stringParaInt. Pode eliminá-la completamente e chamar diretamente: printf("A chave para a tabela (de 0 a %d) é: %d", tamanhoTabela-1, hash(dado));Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 tarapi Postado Outubro 23, 2015 Autor Denunciar Share Postado Outubro 23, 2015 Obrigado!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
tarapi
Boa noite .
Estou tentando implementar um codigo em c para implementar a funcao hash abaixo.
alguém pode me ajudar?
#include <stdio.h>
#include <string.h>
unsigned hash(char *s){
unsigned hval = 0;
while(*s != '\0'){
hval = (hval << 4) + *s;
s++;
}
return(hval);
}
int stringParaInt(char *string) {
int tamanho, primeira, segunda; //Inteiros que representam o tamanho,
//o código da primeira letra da string
//e o código da segunda letra.
tamanho = strlen(string); //Mede o tamanho da string
primeira = string[0]; //Obtém o código da primeira letra
segunda = string[1]; //Obtém o código da segunda letra
int resultado = (tamanho * primeira) + segunda; //Função de transformação
return resultado; //Retorna número que representa a string
}
void main() {
int i;
char dado[50];
printf("\nDefina o tamanho da tabela: ");
scanf("%d", &tamanhoTabela);
for (i=0; i<tamanhoTabela; i++) {
printf("\nDigite uma palavra qualquer: ");
gets(dado);
printf("A chave para a tabela (de 0 a %d) é: %d", tamanhoTabela-1, hash(stringParaInt(dado)));
}
}
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.