Table de Hachage de patronyme en C
Fermé
guitoontruant
Messages postés
315
Date d'inscription
dimanche 7 janvier 2007
Statut
Membre
Dernière intervention
26 août 2011
-
4 déc. 2007 à 12:17
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 - 4 déc. 2007 à 18:31
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 - 4 déc. 2007 à 18:31
A voir également:
- Table de Hachage de patronyme en C
- Table ascii - Guide
- Dans la table des matières de ce document, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Table des matières word - Guide
- Table des annexes word ✓ - Forum Word
- Table de multiplication javascript ✓ - Forum Javascript
5 réponses
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
4 déc. 2007 à 14:10
4 déc. 2007 à 14:10
Salut,
Tout d'abord, tu n'attribues pas d'espace mémoire pour tes chaines de caractères. Ensuite tu fais des affectations avec l'opérateur = qui ne fonctionne pas aussi simplement avec des char *
Et il faut relire ton code, il y a beaucoup de choses de ce genre qui font que ton code n'est pas propre.
Bon courage
Tout d'abord, tu n'attribues pas d'espace mémoire pour tes chaines de caractères. Ensuite tu fais des affectations avec l'opérateur = qui ne fonctionne pas aussi simplement avec des char *
Et il faut relire ton code, il y a beaucoup de choses de ce genre qui font que ton code n'est pas propre.
Bon courage
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
4 déc. 2007 à 15:27
4 déc. 2007 à 15:27
Et bien d'abord il te faut allouer de l'espace mémoire à tes char *, avec la fonction new par exemple. Ca te ferait un truc du genre :
patro = new char [20];
A toi de mettre l'espace que tu veux allouer. Attention, il faut également libérer l'espace mémoire une fois que tu as terminée ce que tu avais à faire. Cela se fait avec la fonction delete :
delete [] patro;
Pour copier patro dans s, il te faut donc allouer la mémoire pour les deux, puis utiliser par exemple la fonction strcpy :
strcpy(s,patro);
Voilà bon courage pour la suite
patro = new char [20];
A toi de mettre l'espace que tu veux allouer. Attention, il faut également libérer l'espace mémoire une fois que tu as terminée ce que tu avais à faire. Cela se fait avec la fonction delete :
delete [] patro;
Pour copier patro dans s, il te faut donc allouer la mémoire pour les deux, puis utiliser par exemple la fonction strcpy :
strcpy(s,patro);
Voilà bon courage pour la suite
guitoontruant
Messages postés
315
Date d'inscription
dimanche 7 janvier 2007
Statut
Membre
Dernière intervention
26 août 2011
53
4 déc. 2007 à 17:04
4 déc. 2007 à 17:04
Bon voilà j'ai fait quelques changement dans le main qui fontionne bien maintenant.
Seulement j'ai un problème avec ma fonction insérer, j'y ai mis:
int inserer(char *s)
{
int compteur=0;
int n=0;
char temp;
char s1[20];
for(i=0;i<(strlen(s)-1);i++) //boucle de calcul de l'indice
{
temp=s[i]; //on met dans temp le caractere du i-ème patronyme
compteur=compteur +(temp-96); //emploi du code ascii pour calculer le hachage
}
while(n<5)
{
if(T[compteur%N]!=0) //recherche si on peut mettre le patronyme
{
temp=s[0];
compteur=compteur + 13*temp;//ajout de 13 fois la première valeur (re-hachage)
n++;
}
else
{
strcpy(s1,s);
*T[compteur%N]=*s1; L'ERREUR EST ICI
return 1;
}
}
return 0;
}
Mais j'ai toujours une erreur. Peux-tu encore m'aider, stp?
Seulement j'ai un problème avec ma fonction insérer, j'y ai mis:
int inserer(char *s)
{
int compteur=0;
int n=0;
char temp;
char s1[20];
for(i=0;i<(strlen(s)-1);i++) //boucle de calcul de l'indice
{
temp=s[i]; //on met dans temp le caractere du i-ème patronyme
compteur=compteur +(temp-96); //emploi du code ascii pour calculer le hachage
}
while(n<5)
{
if(T[compteur%N]!=0) //recherche si on peut mettre le patronyme
{
temp=s[0];
compteur=compteur + 13*temp;//ajout de 13 fois la première valeur (re-hachage)
n++;
}
else
{
strcpy(s1,s);
*T[compteur%N]=*s1; L'ERREUR EST ICI
return 1;
}
}
return 0;
}
Mais j'ai toujours une erreur. Peux-tu encore m'aider, stp?
guitoontruant
Messages postés
315
Date d'inscription
dimanche 7 janvier 2007
Statut
Membre
Dernière intervention
26 août 2011
53
4 déc. 2007 à 17:17
4 déc. 2007 à 17:17
J'ai trouvé l'erreur pour la fonction inserer.
Maintent sur rechercher je crois avoir un problème aussi:
int rechercher(char *s)
{
for(i=0;i<N;i++)
{
if (*T[i]!=s[i]) //il ne fait bien ce test
return 0;
else
return 1;
}
}
Maintent sur rechercher je crois avoir un problème aussi:
int rechercher(char *s)
{
for(i=0;i<N;i++)
{
if (*T[i]!=s[i]) //il ne fait bien ce test
return 0;
else
return 1;
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Stupeflip
Messages postés
391
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
4 décembre 2007
94
4 déc. 2007 à 18:31
4 déc. 2007 à 18:31
Ton test compare un pointeur sur une chaîne de caractères avec une chaîne de caractères donc ca ne marchera pas.
Soit ça va planter, soit ça va te comparer une adresse avec une valeur. Dans les deux cas, ce n'est pas ce que tu veux.
Soit ça va planter, soit ça va te comparer une adresse avec une valeur. Dans les deux cas, ce n'est pas ce que tu veux.
4 déc. 2007 à 15:06