chaines de
caractères
Ici
nous attaquons un chapitre un peu long que le
précèdent et pourtant il n’est pas
nouveau pour nous. Ah oui L’expression
chaîne de caractères, on l’a
déjà entendu et même
on l’a utilisé dans nos cours
précédents.
Je sais qu’il y a des gens qui se disent :
« mais pourquoi on nous montre des cours avant leurs
temps (le temps de les voir ) ? »Eh
bien ne vous paniquer pas ! Je ne suis pas fou si
j’ai choisi de faire toujours comme ça.
C’est ma méthode. Et d’ailleurs vous
voyez qu’en vous vous trouvant devant un cours que vous
connaissez au moins quelque chose,
vous ayez le courage de le lire et de le bien comprendre. Par contre si
vous vous trouvez dans un cours 100% nouveau, vous
risquerez de vous fatiguer et de faire des bons sommes. .
Ici, nous allons introduire des notions du tableau et de
pointeur : des cours que nous allons voir dans le future.
Si
les mots caractères et chaîne de
caractères sont nouveaux pour vous, je vous recommande de
retourner lire les cours précédents.
Souvenez vous que je vous
promet que la librairie standard, vous allez mieux la comprendre au
fuir et à mesure ? Ça fait
longtemps que nous utilisons seulement stdio.h et stdlib.h.
Eh bien dans ce chapitre, on va etudier quelques fonctions de string.h.
Voila maintenant je vous recommande d’aller lire
le cours sur la
manipulation de caractère et de chaînes de
caractères avant de nous suivre car ça
vous servira quelques chose ...
I)
Variable caractère
1)
Type char:
Char
est un type de donnée numérique du langage C. il
sert à stocker une lettre. Il faut 1 octet pour stocker une
variable de type char. [voir ici ]
2)
déclaration :
Syntaxe :
char nom_variable ; exemple :
char a ;
3)
Initialisation :
Syntaxe :
char nom_variable
= ‘caractère’ ; Exemple :
char lettre = ‘a’ ;
II)
Chaînes de caractères
Avant
de continuer nous allons ouvrir une
petite parenthèse sur les notions : tableau et
pointeur.
Tableau :
Par définition, un tableau est un ensemble
d’emplacements mémoire qui portent le
même nom et contiennent le même type de
données.
Pour la déclaration, voici la syntaxe : type
nom_tableau [index1] [index2]…
Les dimensions
d’un tableau sont déterminées par le
nombre d’index.
Exemple
1: int montableau [6] ;
Ici j’ai
déclaré un tableau qui est montableau de 6
éléments. On a un seul index, donc montableau a
une dimension.
Exemple 2 : int montableau [6] [8] ;
ici on a deux index donc un montableau a deux dimensions.
montableau a 6 lignes et 8 colonnes.
Pointeur:
Les pointeurs sont des
variables qui ont pour valeur une adresse mémoire.
Dans ce tableau, on voit que a
contient l’adresse de b. on dit que a est un pointeur vers b.
Maintenant
qu’on a quelques notions de tableau et pointeur, on peut bien
continuer notre cours.
Une
chaîne de caractère est une séquence de
caractères qui se termine par le caractère nul (
\0). Pour créer une chaîne de
caractères, il faut bien déclarer un tableau de
type char.
exemple: char machaine[9];
chaine de 8 caractère, le dernier étant le
caractère nul.
Eh
bien ! Souvenons nous de notre 2eme TP. Ah oui, je
vous ai précipité mais le deuxième TP,
on devrait le voir ici.
Je suis sure que rien ne
sera difficile pour vous sur cette partie car on l’a
déjà fait. Je vous recommande le 2eme TP car nous allons le
réutiliser ici.
1)
Initialisation :
Quelques
méthodes d'initialisations à travers
des exemples :
exemple 1:
char chaine[12] = {
't','e','c','h','n','o','l','o','g','i','e'};
exmple 2: char chaine[12] = " technologie";
exemple 3: char chaine[12];
chaine[0] = 't';
chaine[1] = 'e';
chaine[2] = 'c';
chaine[3] = 'h';
chaine[4] = 'n';
chaine[5] =
'o';
chaine[6] = 'l';
chaine[7] = 'o';
chaine[8]
= 'g';
chaine[9] = 'i'
chaine[10]='e';
chaine[11]='\0'
char
chaine[12] est
la déclaration
d'un
tableau
de12 caractère pour stocker "technologie + le
caratère nul ( \0)".
2)
Utilisation avec un pointeur.
Pour
accéder à une chaîne de
caractères définie par un tableau de
caractères, on utilise le nom du tableau sans les crochets
(pointeur vers le premier caractère de la chaîne).
Exemple :
char machaine[12] = " technologie";
machaine
est un pointeur vers le début de la chaîne. La fin
de la chaîne est représentée par le
caractère nul.
3)
Chaîne et allocation de mémoire:
Il
est possible de créer une chaîne de
caractère sans utiliser un tableau de caractères.
Pour cela on définit un pointeur vers le début de
chaîne et on place le caractère nul enfin de
chaîne. Il y a 2 méthodes :
a)
allocation de
mémoire pour une chaîne
littérale :
La mémoire est allouée au moment de la
compilation du programme. L’emplacement mémoire
est géré par le compilateur.
Exemple :
char *exp = " technologie " ;
b) Allocation dynamique
La
mémoire est allouée un moment de
l’exécution pour programme. On utilise pour cela
la fonction malloc.
La fonction malloc permet de réserver l’espace
mémoire.
Syntaxe :
#include<stdio.h>
Void *malloc(taille) ;
Usage
de malloc :
-Déclaration
d’un pointeur
-Initialisation du pointeur a la valeur renvoyée par malloc.
Exemple :
Char *technologie ;
technologie = malloc(12) ;
technologie pointe sur un bloc de 12 octets qui peut recevoir une
chaîne de caractère.
III)
Affichage de chaînes de caractères
Nous
avons appris comment utiliser la fonction puts et printf. Pour cela je
préfère illustrer cette partie juste par des
exemples.
1) la
fonction puts:
exemple:
code C/C++:
#include<stdio.h>
#include<stdlib.h>
main()
{ char *exp = "technologie";
puts(exp);
system("pause");
return 0;
}
|
Avec ce code, nous aurons le mot technologie qui s'affichera sur
l'ecran.
2)
la fonction printf:
exemple 1:
code
C/C++:
#include<stdio.h>
#include<stdlib.h>
main()
{
char
*exp = "technologie";
printf ("%s\n",exp);
system("pause");
return 0;
}
|
exemple 2:
#include<stdio.h>
#include<stdlib.h>
main()
{ char chaine[12];
chaine[0] = 't';
chaine[1] = 'e';
chaine[2] = 'c';
chaine[3] = 'h';
chaine[4] = 'n';
chaine[5] =
'o';
chaine[6] = 'l';
chaine[7] = 'o';
chaine[8]
= 'g';
chaine[9] = 'i';
chaine[10]='e';
chaine[11]='\0';
printf ("%s\n",chaine);
system("pause");
return 0;
}
|
Vous
voyez très bien que tous nos exemples de la fonction puts et
printf nous donnent comme résultat cette console.
IV)
Lecture de chaînes de caractères :
1)
la fonction gets:
Cette
fonction lit une chaîne de caractères
entrée au clavier. Elle ajoute le caractère nul
en fin de chaîne et renvoie la chaîne au
programme.
syntaxe: include<stdio.h>
char
*gets (char *str);
exemple:
code
C/C++
#include<stdio.h>
main()
{ char l[12];
gets(l);
}
|
2) la
fonction scanf:
exemple:
code C/C++
#include<stdio.h>
#include<stdlib.h>
main()
{char l[12];
printf(" quel est
ton nom?\n");
scanf("%s",l);
system("pause");
return 0;
}
|
V) Manipulation de
chaînes de caractères <string.h>
Les fonctions sont biens expliquées dans le
tableau, pour cela on va vous donner juste deux exemples pour que vous
ayez l’image de leur utilisation.
exemple
1.
code
C/C++
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char l[45];
char k[45];
printf("
quel est ton nom?\n");
scanf("%s",l);// on recupère
le nom saisi en tant que l.
strcpy(k, l);//on
copie l dans k . donc k va contenir le même mot que
l.
printf("tu
t'appelles %s\n", k);// on affiche k.
system("pause");
return 0;
}
|
Voici le résultat de la
console:

exemple
2:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char l[45];
char k[45];
printf("
quelles sont les premieres lettres du nom de ton pays?\n");
scanf("%s",l);// on recupère
les premieres lettres saisies en tant que l.
printf(" et
les lettres restant?\n");
scanf("%s",k);// on recupère
les lettres restant en tant que k.
strcat(l, k);//on
copie k a la fin de l . donc l va contenir l+k.
printf("ah!tu viens
de %s\n", l);//
on affiche l.
system("pause");
return 0;
} |
le résultat du
fichier executable :

fin!
|