Les chaînes de caractères
Un caractère
Rappel :
La machine ne sait manipuler que des valeurs entières. Nous avons vu que par quelques conversions, nous avons pu lui faire traiter des nombres décimaux et booléens. Les caractères constituent une nouvelle difficulté à relever.
Les caractères sont tout simplement convertis en entier à l’aide d’une table de conversion que nous appelons la table ASCII (American Standard Code for Information Interchange) :
(Source : Wikipédia)
Exemple :
Par exemple, si je veux stocker en mémoire le caractère « A », je vais le convertir grâce à la table ASCII en entier à savoir 65. Ensuite, la machine va stocker 65, ce qu’elle va faire très facilement puisqu’elle manipule maintenant un entier et non plus un caractère.
C’est le type qui permet une fois de plus de donner du sens aux données. En effet, sans le type, il serait impossible de savoir si la mémoire contient le nombre entier 65 ou le caractère « A » qui a été converti en 65 et stocké. La représentation en mémoire va être identique dans les deux cas. Cependant, le type va permettre au langage de programmation de savoir de quoi on parle.
La plupart des langages intègrent même des fonctions qui peuvent faire la conversion entre un caractère, et sa représentation numérique. Par exemple, en Python :
Chr(65) retourne « A », le caractère correspondant au nombre 65 ;
Ord(‘A’) retourne 65, la valeur numérique associée au caractère « A ».
Attention :
Il ne faut pas confondre la valeur numérique 3 avec le caractère « 3 ». Ces deux valeurs ne sont pas égales. Les langages de programmation utilisent souvent les quotes (‘), ou les doubles quotes (‘’) pour distinguer les caractères des nombres.
La chaîne de caractères
La chaîne de caractères est composée de plusieurs caractères les uns à la suite des autres. Une chaîne de caractères nous permet donc de représenter des mots ou des phrases.
Certains langages, comme le C / C++, font la différence entre un caractère (type char), et une chaîne de caractères (type String). La plupart du temps, vous pouvez vous passer de cette distinction, en partant du principe qu’un caractère peut être considéré comme une chaîne de caractères ne comportant qu’un seul élément.
Remarque :
En termes de représentation mémoire, une chaîne de caractères est stockée dans des emplacements contigus de mémoire. Lorsque l’on accède à une chaîne de caractères, on accède en fait au début de la zone mémoire qui contient la chaîne. Il est ensuite possible d’accéder à un élément particulier de la chaîne en utilisant l’opérateur [].
Nous affectons ici la chaîne de caractères ’Bonjour’ à la variable « ch » :
Ch[0] accède au premier élément de la chaîne : ‘B’
Ch[3] accède au troisième élément de la chaîne : ‘j’
Attention :
En algorithmie, comme en programmation, le premier caractère de la chaîne se trouve à l’indice 0, et non à l’indice 1. Cela cause beaucoup de problèmes aux développeurs débutants. Vous pouvez retenir que Ch[0] accède à la tête de la chaîne, et fait 0 décalage. Ch[3] accède à la tête de la chaîne, et procède 3 fois à la recherche de l’élément suivant.
Les opérations sur les chaînes
Remarque :
Une fois de plus, l’ordinateur va se baser sur le type de la variable pour savoir ce qu’il peut en faire. Le type chaîne de caractères va donc nous permettre d’utiliser des opérations comme :
La concaténation : a + b (a : chaîne et b : chaîne)
La répétition : a * b (a : chaîne et b : entier)
Accès à l’élément d’indice i : ch[i]
Comparaisons : a > b, a = b ,etc. (a : chaîne et b : chaîne)
La récupération d’une sous-chaîne : ch[i :j] ou substring(ch, i, j)
La longueur d’une chaîne : longueur(ch) ou len(ch) ou length(ch) ou ch.length selon le langage utilisé
La concaténation met une fois de plus en avant l’importance des types. Nous utilisons la même opération « + » pour faire la somme de deux nombres et pour concaténer deux chaînes. La différence entre les deux opérations se fait uniquement sur le type de variables.
Exemple :
Nous allons utiliser quelques fonctions vues ci-dessus. Nous allons réaliser un algorithme qui manipule deux chaînes de caractères, qui les concatène, et qui donne la première lettre de la chaîne concaténée.
Variable :
c1 : chaîne de caractères
c2 : chaîne de caractères
c3 : chaîne de caractères
Début
c1 ← ‘’Bonjour’’
c2 ← ‘’tout le monde’’
c3 ← c1 + 2
Afficher ‘’La première lettre de ‘’ + c3 + ’’ est ‘’ + c3[0]
Fin
Cet algorithme affiche : la première lettre de Bonjour tout le monde est B
Remarque :
Ce premier algorithme basé sur les chaînes de caractères nous montre comment concaténer deux chaînes de caractères avec l’opérateur « + », et comment accéder à un élément bien précis avec l’opérateur []. Ces deux opérateurs fonctionnent comme attendu ici, car nous avons pris le soin de déclarer nos variables c1, c2 et c3 en tant que chaînes de caractères. Cela permet à la machine de savoir exactement comment elle doit réagir.