Cours 3 :

Les chaînes de caractères en langage C

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Rappels : les tableaux

BSIO1 - SI4 Les bases de la programmation

Un tableau (uni-dimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples du même type.

Le nombre N est alors la dimension du tableau.

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Déclaration de tableaux en C

TypeSimple NomTableau[Dimension] ;


Les noms des tableaux sont des identificateurs qui doivent correspondre aux restrictions et normes définies pour le langage C (cf cours 2).

1._les chaînes de caractères

Les chaînes de caractères en C sont considérées comme des tableaux de caractères.

 

Déclaration de chaînes de caractères en C

char NomVariable[Longueur];

 

Exemples

char NOM [20];
char PRENOM [20];
char PHRASE [300];

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

BSIO1 - SI4 Les bases de la programmation

1.1_Dimension d'une chaîne

Lors de la déclaration, il faut indiquer l'espace à réserver en mémoire pour le stockage de la chaîne.

 

Une chaîne de caractères est terminée par le symbole '\0' (caractère NULL).

 

Ainsi, pour une chaîne de n caractères, nous devons prévoir n+1 octets : pour la mémorisation de la chaîne de caractères "Hello", le compilateur C a besoin de six (!!) octets en mémoire.

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

1.2_Stockage en mémoire 

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Le nom d'une chaîne est le représentant de l'adresse du premier caractère de la chaîne.

 

Pour mémoriser une variable TXT qui doit être capable de contenir un mot de N caractères, nous avons besoin de N+1 octets en mémoire:

2_L'initialisation

Il existe plusieurs façon d'initialiser une chaîne de caractères.

 

Soit en lui affectant un tableau de caractères entre accolades:

   char CHAINE[6] = {'H','e','l','l','o','\0'};

 

Soit en indiquant simplement une chaîne de caractère constante:

   char CHAINE[] = "Hello";

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

2.1_Conséquences

  • 'x'  est un caractère constant, qui a une valeur numérique (120 dans le code ASCII). 

 

  • "x" est un tableau de caractères qui contient deux caractères, la lettre 'x' et le caractère NUL: '\0' 

 

  • 'x' est codé dans un octet 

 

  • "x" est codé dans deux octets 

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

3_Caractères d'échappement

Les chaînes de caractères constantes (string literals) sont indiquées entre guillemets. La chaîne de caractères vide est alors: ""

 

Le symbole " peut être représenté à l'intérieur d'une chaîne par la séquence d'échappement \":
      printf("Affichage de \"guillemets\" \n");

 

Le symbole ' peut être représenté à l'intérieur d'une liste de caractères par la séquence d'échappement \' :


     char TXT[]={'L','\'','a','s','t','u','c','e','\0'};

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

4_Accès aux composantes d'une chaîne

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

L'accès à un élément d'une chaîne de caractères peut se faire de la même façon que l'accès à un élément d'un tableau.

4.1_Précédence des caractères

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

La précédence des caractères dans l'alphabet d'une machine est dépendante du code de caractères utilisé. Pour le code ASCII, nous pouvons constater l'ordre suivant:

. . . ,0,1,2, ... ,9, . . . ,A,B,C, ... ,Z, . . . ,a,b,c, ... ,z, . . .

  • La chaîne vide "" précède toutes les autres chaînes.
  • "ABC" précède "BCD"  car 'A'<'B' 
  • "ABC" précède "B"       car 'A'<'B' 
  • "Abc" précède "abc"    car 'A'<'a' 
  • "ab" précède "abcd"    car "" précède "cd" 
  • " ab" précède "ab"       car ' ' <  'a' 

Exercice d'application

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

1. Ecrire un programme qui lit deux chaînes de caractères, et qui indique leur précédence lexicographique dans le code de caractères de la machine (ici: code ASCII).

Testez votre programme à l'aide des exemples suivants :

"ABC" et "BCD" 

 
"ABC" et "B"   
"Abc" et "abc"   
"ab" et "abcd"   
"  ab" et "ab"   

Exercice d'application

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

2. Ecrire un programme qui lit une chaîne de caractères CH saisie au clavier par l'utilisateur et qui convertit toutes les majuscules dans des minuscules et vice-versa.

Le résultat de la conversion sera mémorisé dans la même variable CH et affiché après la modification.

Exercice d'application

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

3. Écrire un programme qui saisit une chaîne pouvant contenir des espaces et qui affiche le nombre de mots de la phrase, puis affiche chaque mot de la chaîne. Le séparateur étant l’espace.

Testez votre programme à l'aide des exemples suivants :

J'aime tant la programmation, surtout le module SI4
Est-il possible d'aimer autant une matiere?
Je programme donc je suis

Exercice d'application

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

4. Ecrire un programme qui lit une chaîne de caractères CH saisie au clavier par l'utilisateur et qui vérifie si CH contient une adresse IPv4 valide : c'est à dire 4 valeurs décimales séparées par des '.'

Exercice d'application

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

5. Ecrire un programme qui  demande à l’utilisateur de taper une chaîne de caractères et qui affiche la lettre (minuscule ou majuscule) la plus fréquente.

5_Les fonctions utiles

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

Les bibliothèques de fonctions de C contiennent une série de fonctions spéciales pour le traitement de chaînes de caractères.

5.1_Les fonctions de <stdio.h>

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

  • printf avec le spécificateur de format %s permet d'intégrer une chaîne de caractères dans une phrase.
  • scanf avec le spécificateur %s permet de lire un mot isolé à l'intérieur d'une suite de données du même ou d'un autre type.
  • gets est idéal pour lire une ou plusieurs lignes de texte (p.ex. des phrases) terminées par un retour clavier.
char NOM[] = "hello, world"; 
printf(":%s:", NOM); 

char LIEU[25];
int JOUR, MOIS, ANNEE;
printf("Entrez lieu et date de naissance : \n");
scanf("%s %d %d %d", LIEU, &JOUR, &MOIS, &ANNEE);

int MAXI = 1000;
char LIGNE[MAXI];
gets(LIGNE);

5.2_Les fonctions de <string>

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

  • strlen(s) fournit la longueur de la chaîne  s  sans compter le '\0' final

 

  • strcpy(dest, s) copie la chaîne s  vers  dest 
  • strncpy(dest, s, n) copie au plus n caractères de  s  vers  dest 

 

  • strcat(s1, s2) ajoute les caractères de  s2  à la fin de  s1 
  • strncat(s1, s2, n) ajoute au plus  n  caractères de  s2  à la fin de  s1 

 

  • strcmp(s, t) compare  s  et  t  lexicographiquement​

5.3_Les fonctions de <ctype>

BSIO1 - SI4 Les bases de la programmation

BTS SIO - AMEP Redoute - Année scolaire 2015-2016 - Préparé par Axel Féliot

La fonction: retourne une valeur différente de zéro si:
isupper(<c>)  si <c> est une majuscule ('A'...'Z')
islower(<c>) si <c> est une minuscule ('a'...'z')
isdigit(<c>) si <c> est un chiffre décimal ('0'...'9')
isalpha(<c>) si islower(<c>) ou isupper(<c>)
isalnum(<c>) si isalpha(<c>) ou isdigit(<c>)
isxdigit(<c>) si <c> est un chiffre hexadécimal ('0'...'9') ou ('A'...'F') ou ('a'...'f')
isspace(<c>) si <c> est un signe d'espacement 

BSIO1-SI4-C3. Les chaînes de caractères

By Axel FELIOT

BSIO1-SI4-C3. Les chaînes de caractères

Présentation des chaînes de caractères et de leur utilisation en langage C

  • 1,609