lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010
-
10 oct. 2007 à 19:00
lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010
-
11 oct. 2007 à 18:26
Bonjour, j'aurai une petite question.
j'ai un tableau qui contient les caracteres de l'alphabet de 0 a 25 pour a à z.
Je voudrai a partir d'un caractere obtenir le nombre lui correspondant dans le tableaux.
Par exemple a partir du caractere z obtenir 23 et du caractere b obtenir 1.
Mais je ne sais pas comment faire, ce que je sais faire c'est l'inverse moi :)
xav0
Messages postés20Date d'inscriptionsamedi 23 septembre 2006StatutMembreDernière intervention10 octobre 2007 10 oct. 2007 à 22:43
Bonjour,
tu peux aussi créer un tableau inverse du premier. Ca marche quels que soient les caractères dans le premier tableau.
Dim monTableau(0 To taille_quelconque) As String
'monTableau doit être rempli entièrement avec des caractères...
Dim TableauInv(0 To 255) As Long, Lettre As String
'Initialise le tableau
For i = LBound(monTableau) To UBound(monTableau)
Lettre = Asc(monTableau(i))
TableauInv(Lettre) = i
Next i
'Maintenant, il suffit de consulter le deuxième tableau pour obtenir l'index à partir d'un caractère
MsgBox("La lettre A a pour indice " & TableauInv(Asc("A")))
MsgBox("La lettre L a pour indice " & TableauInv(Asc("L")))
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 oct. 2007 à 20:03
Salut
Je suppose que tes lettres ne sont pas classées alphabétiquement dans ton tableau ... (ton exemple z:23 et b:1 est troublant)
Pour les tableaux, aucune autre solution que de scruter chaque élément du tableau pour retrouver celui qui t'intéresse :
For r = 0 To 25
If monTableau(r) = LaLettreQueJeCherche Then
MsgBox "La lettre """ & LaLettreQueJeCherche & """ est dans monTableau(" & CStr(r) & ")"
Exit For
End If
Next r
Avec une dimension à 26 éléments, cette boucle ne devrait pas allourdir tes programmes.
Une autre solution consiste à utiliser une Collection à la place d'un tableau.
Une Collection permet d'accéder aux données :
- Soit par l'index maCollection(23)
- Soit par le contenu maCollection("z")
Condition : Il faut que le contenu de chaque élément soit unique
Problème : Une collection est lente pour les méthodes Add et Remove, par contre, elle est plus rapide en recherche.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
caco64
Messages postés69Date d'inscriptionjeudi 27 septembre 2007StatutMembreDernière intervention14 décembre 2007 10 oct. 2007 à 22:36
Idem mais avec une condition.
Par exmple, je suppose que tu as mis les caractères dans l'ordre minuscule, puis majuscule puis chiffres de 0 à 9
Alors le "a" doit renvoyer 1, le "A" 27 et le "0" 53.
Tu peux faire un truc du style :
sub mon_tableau()
dim choix_caractere
dim num_asc as integer
dim indice_tableau as integer
'choisir le caractere, par exemple avec un inputbox
choix_caractere = "d"
num_asc = asc(choix_caractere)
if num_asc >= 48 and num_asc <= 57 then
indice_tableau = num_asc + 5
elseif num_asc >= 97 and num_asc <= 122 then
indice_tableau = num_asc - 96
elseif num_asc >= 65 and num_asc <= 90 then
indice_tableau = num_asc - 42
else
msgbox "pb sur le choix du caractère"
end if
end sub
il existe un code ascii différent pour les minuscules et les majuscules
La haine aveugle n'est pas sourde
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 oct. 2007 à 23:28
Re
Hote moi d'un doute : Tu mets les lettres dans un ordre quelconque, on est d'accord ?
(puisque ton exemple, tu as mis le "z" est 23, alors qu'il serait le 26ème élément, donc d'index 25 dans un tableau classé)
Il ne peut donc pas y avoir de correspondance entre le code ASCII de la lettre et le numéro de l'index du tableau !
Si les lettres sont dans l'ordre alphabétique dans ton tableau, je te conseille vivement de prendre des cours de français avant de continuer en programmation. Une erreur pareil sur le numéro d'une lettre dans l'alphabet est quand même une base minimum, non ? et en plus, ça éviterait qu'on perde notre temps ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)