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.