Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
705 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  HashCode avec lettres accentuées...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

HashCode avec lettres accentuées...

n°1038707
Kineas
Posté le 07-04-2005 à 12:04:03  profilanswer
 

Bonjour,  
j'ai la fonction suivante qui me permet de calculer un code en fonction d'une chaîne de caractères.
 

Code :
  1. int HashCode(string chaine)
  2. {
  3.     int ret=0;     // valeur retournée
  4.     int p=0;        // parcours de la chaine en entree
  5.     cout << chaine << " : " << (unsigned int)chaine[p] << endl; //////////////
  6.     while(chaine[p] != '\0')
  7.     {
  8.         ret = ret*256 + (unsigned int) chaine[p];
  9.         if (ret >= TAILLE_MAX_TAB)
  10.             ret = ret%TAILLE_MAX_TAB;
  11.         p++;
  12.     }
  13.     cout << ret << endl; ///////////
  14.     return ret;
  15. }


 
Il y a un problème lorsque la chaine passée en paramètre commence par une lettre accentuée (ret prend alors comme valeur -xxxxxxxxx) et j'aimerais résoudre ce problème sans bidouillage (si je met une condition sur les caractères à lire ca fonctionne mais ca rend la fonction de hashcode moins performante!)
Quelqu'un a une idée ?  :bounce:


Message édité par Kineas le 07-04-2005 à 12:04:43
mood
Publicité
Posté le 07-04-2005 à 12:04:03  profilanswer
 

n°1038777
Kineas
Posté le 07-04-2005 à 13:12:54  profilanswer
 

Aurai-je posé une colle du c++ ?

n°1039158
m3z
il faut toujours faire simple
Posté le 07-04-2005 à 17:15:27  profilanswer
 

Hello,  
 
Ce n'est pas une erreur.  
Si tu ne veux plus de signe passe ta déclaration de retour de fonction et la variable Ret en unsigned int.  
 
explication :
Le signe - c'est la valeur du premier bit (poids le plus fort) de l'integer signé.
 
exemple (sur un octet) :  
64 =  = 40 hex = 01000000 b (MSB à 0)
-64 = FC hex = 11000000 b (MSB à 1)
 
maintenant si tu fais Ret = 64 + 64 tu obtients ... -1 sur un signé et 128 sur un non signé.
=> 128 = 80 hex = 10000000 b (MSB à 1) => -1
 
C'est vrai sur un octet mais aussi sur un int, long ...
A+


Message édité par m3z le 07-04-2005 à 17:16:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  HashCode avec lettres accentuées...

 

Sujets relatifs
Tester 3 lettres[SQL]Insérer un espace toutes les 2 lettres dans un champ [Résolu]
[SQL] Récuperer une chaine sans les deux premieres lettres ?id, hashcode, persistence et ces sortes de choses
Texte avec zoom au passage sur les lettrestransformation d'une chaine en lettres + chiffres...
[Oracle/SQL] Différencier des séries de chiffres et de lettresUn compteur avec des lettres, comment faire -simple- ?
Deux dernieres lettres d'un champ 
Plus de sujets relatifs à : HashCode avec lettres accentuées...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR