Correspondance dans un tableaux

Résolu
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010 - 10 oct. 2007 à 19:00
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 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 :)

Pourriez vous m'aider?
Merci

7 réponses

lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
10 oct. 2007 à 21:39
merci,
mais si j'agrandi mon tableau en rajoutant les majuscules et les chiffres de 0 a 9 :)
lol
3
xav0 Messages postés 20 Date d'inscription samedi 23 septembre 2006 Statut Membre Dernière intervention 10 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")))
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
Mikaels35 Messages postés 146 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 17 novembre 2009 2
10 oct. 2007 à 20:09
Sachant que la valeur Asc("a") est égale à 97

n=Asc("b")-97 -> 1

n=Asc("z")-97 -> 25

@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
11 oct. 2007 à 18:26
oui j'ai fait une erreur ca arrive non? c'est bien 25 et pas 23 pour le z

merci xav0 pour ta reponse c'est ce a quoi j'ai pensé cette nuit aussi :)
0
Rejoignez-nous