Compraison de chaine de caractère - C++ - Programmation
Marsh Posté le 28-04-2003 à 00:39:44
Ben si test=1, ca veut pas dire que ta premiere chaine est "superieure" a la seconde?
Marsh Posté le 28-04-2003 à 00:41:48
Bah si, regarde dans une table de caractères ASCII, tu verras qu'il a trié par ordre des caractères ASCII :
0 = 30
9 = 39
A = 41
Z = 5a
a = 61
z = 7a
_ = 5f
. = 2e
' ' = 20
Donc il a bien trié.
A toi de gérer les cas particluliers pour faire passer les espace, _ et ponctuations avant les lettres et les chiffres.
Marsh Posté le 28-04-2003 à 10:42:41
voilà ce que j'ai trouvé sur le net sur strcmp :
Citation : unction: int strcmp (const char *s1, const char *s2) |
Celà ne veut-il pas dire ques les caractères sont interprétés par des entiers ? (de 0 à 256 je crois)
Marsh Posté le 28-04-2003 à 10:50:12
ben c'est pas nouveau.
C/C++ ne font pas la différence entre des nombre et des lettres.
les types ne servent qu'à surcharger les opérateurs et indiquer sur combien de bytes travrailler.
Marsh Posté le 28-04-2003 à 10:50:47
en C, tu peux très bien faire 'a' - 32
Ca te retourne 'A' (ou 65)
Marsh Posté le 28-04-2003 à 11:00:57
Citation : voilà la fct strcmp me dit que la chaine "HOPITAL_BELLEVUE_01" est plus "petite" que "HOPIT._CLAUDINON_20" ! |
Bon c'est vrai que celà ne reflete pas la réalité !
je me suis embrouillé les neurones hiers, j'avais besoin de dormir !!
Bref, quoiqu'il en soit,
Code :
|
me donne bien test=1, donc (maintenant étant bien reposé), que "HOPITAL_BELLEVUE_01" est superieur à "HOPIT._CLAUDINON_20" !!
Le problème est que quand j'ai rentré ces chaines dans mon dico, je ne me suis pas préccupé du classement alpha, puisque notre prof nous a assuré que c'était classé !
Donc, en lisant mon fichier, j'ai mis ces chaines dans mon tableau en correspondance avec la positin de lecture !!
Ainsi, quand je veux savoir en quelle posisiton "HOPITAL_BELLEVUE_01" se trouve dans mon tableau, je devrais avoir comme réponse 151 (c'est là que ce trouve cette chaine !)
|
(ici, les "xxx --> " ne figure pas dans mon fichier, mais c'est juste pour indiquer leur position respective vu qu'il y a 514 chaines à référencer !)
Pour la recherche du N° d'indice, j'utilise un alog de dichotomie :
Code :
|
ici je passe mot="HOPITAL_BELLEVUE_01"
puis l'alog cherche :
1)
a=1 b=514 --> val=257
-->test=-1 --> b=val=257
2)
a=1 b=257 --> val=129
-->test=1 --> a=val=129
3)
a=129 b=257 --> val=193
-->test=-1 --> b=val=193
4)
a=129 b=193 --> val=161
-->test=-1 --> b=val=161
5)
a=129 b=161 --> val=145
-->test=1 --> a=val=145
Jusque là, tout va bien !!
6)
a=145 b=161 --> val=153
-->test=1 --> a=val=153
Là ca va plus !!!
d'après ces résultats, la chaine mot "HOPITAL_BELLEVUE_01" est plus grande que la chaine d'indice 153 qui est "HOPIT._CLAUDINON_20" !!
Or celà revient à dire que mon prof s'est planté dans le tri des ces chaines !!!
Et donc que "HOPIT._CLAUDINON_20" doit aller avant "HOPITAL_23", non ??
Voilà,
merci @+
Miles
Marsh Posté le 28-04-2003 à 11:03:41
oui, les ponctuation sont toujours avant les lettres/chiffres
Marsh Posté le 28-04-2003 à 11:13:16
é é é é !!
Notre prof est un boulet !!!
Il nous avait pourtant assuré que dans son fichier les noms étaient classé par ordre alphabétique !!
Bon, je lui envoie un mail !!
Merci @+
Miles
Marsh Posté le 28-04-2003 à 00:23:40
Salut,
voilà la fct strcmp me dit que la chaine "HOPITAL_BELLEVUE_01" est plus "petite" que "HOPIT._CLAUDINON_20" !
En effet avec :
j'ai test = 1
Est-ce normal ?
Car dans ce cas, ceci n'est pas dans l'ordre alphabétique :
HOPITAL_23
HOPITAL_28
HOPITAL_BELLEVUE_01
HOPITAL_BELLEVUE_04
HOPIT._CLAUDINON_20
HOTEL_DE_VILLE_04
n'est-ce pas ?
PS : c'est en C
Merci @+
Miles