Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Tp8_ Les Chaines de Caracteres

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 9

Atelier

8
Les chaines de caractères

ATELIER 8 : LES CHAINES DE CARACTERES

Objectifs du TP

• Manipuler la structure chaîne de caractères en C.

Objectifs spécifiques de ce TP

Développer des programmes C utilisant :

• Les chaines de caractères.

• Les fonctions prédéfinies de manipulation des chaînes de caractères.

1
8
Notes de cours :
1. Déclaration

char nom_chaîne[taille];

Atelier
Les chaines de caractères
I. Les chaînes de caractères

Il n'y a pas de type chaîne de caractères prédéfini en C. Par convention, les chaînes de
caractères sont représentées à l'aide de tableaux de caractères à un indice. Le principe
est de stocker dans un tableau suffisamment grand, les différents caractères d'une
chaîne, suivis par un caractère supplémentaire '\0' (code ascii = 0 : caractère nul) qui
fait le rôle de marqueur de fin de chaîne. Les caractères se trouvant à la suite de '\0'
seront ignorés.

Un tableau de N positions ne peut contenir alors que N-1 caractères, le dernier


élément du tableau est '\0'.

2. Initialisation

Les tableaux chaîne de caractères peuvent être initialisés par une liste, mais aussi par
une chaîne de caractères constante entre guillemets.

Exemple :

char chaine[6]="Salut";

est équivalente à

char chaine[6]={'S','a','l','u','t','\0'};

Remarque :
- Si on utilise une list e pour initialiser la chaîne, le caractère nul (' \0') n'est pas rajouté automatiquement.
- Lorsque le compilateur rencontre une chaîne de caractères, il la converti automatiquement en tableau et rajoute le
caractère nul à la fin.

Exemple :

char prenom[10]="sami";
012345…9
's 'a 'm 'i '\0'
' ' ' '

- Soit la déclaration suivante :

char phrase[]="Bonjour\n\n";
8
2

Atelier
Les chaines de
caractères
➔ Le compilateur peut calculer la longueur d'une chaîne. Dans ce cas, la chaîne ne pourra plus être allongée.
➔ Les caractères d'interligne occupent 2 caractères dans le texte ' \' et 'n', mais un seul octet dans le programme
exécutable et en mémoire central e.

0123456789
'B 'o 'n 'j 'o 'u 'r '\n' '\n' '\0'
' ' ' ' ' ' '

3. Opérations d'entrée/sortie de chaînes

a. Lecture

Soit la déclaration suivante :


char ch[10];

a.1. La fonction scanf

scanf("%s",ch)

- scanf ne permet pas de lire des chaînes de caractères contenant des blancs ou des
tabulations.
- On ne doit pas utiliser l'opérateur "adresse de" (&) lors de la lecture d'une chaîne
de caractères, les tableaux étant de toute façon passés par référence (les noms des
tableaux représentent déjà des adresses).

a.2. La fonction gets

gets(tableau_de_caractères)

- Elle permet de lire une chaîne de caractères en entrée et de la placer dans le


tableau de caractères passé en paramètre.
- La lecture se termine à la réception d'un caractère interligne (​ ). - Le '\n'
n'est pas inséré dans la chaîne, il est remplacé par '\0'. - gets permet
l'entrée de chaînes contenant des espaces et des tabulations.

b. Ecriture

printf("%s", chaîne) : affiche la chaîne de caractères chaîne.


puts(chaîne) : affiche la chaîne de caractères chaîne, et ajoute un caractère
d'interligne à la fin.

4. Manipulation des chaînes de caractères

Il existe plusieurs fonctions de manipulation de chaînes. Elles sont déclarées dans le


fichier string.h.
8
3

Atelier
Les chaines de caractères

a. Copier une chaîne dans une autre

Les chaînes de caractères en C étant des tableaux, il n'est pas possible d'utiliser
l'opérateur d'affectation '=' pour les copier.
strcpy(ch_destination,ch_source)

Cette fonction permet de copier ch_source dans ch_destination, y compris le


marqueur de fin '\0'.

strncpy(ch_destination,ch_source,n)

Cette fonction permet de copier les n 1ers Caractères de ch_source.

Exemples :

char ch1[20]=""; /* chaîne vide */


char ch2[20]="";
strcpy(ch1,"Salut"); /* ch1 contient "salut" */
strncpy(ch2,ch1,2); /* ch2 contient "sa" */

b. Mesurer la longueur d'une chaîne

On utilise la fonction :

int strlen(chaîne)

qui retourne la longueur de la chaîne passée en paramètre : le nombre de caractères


avant la caractère de terminaison '\0'.

Exemple :

int longueur;
longueur = strlen(ch1); /*longueur est égale à 5 */

c. Comparer deux chaînes de caractères

On utilise la fonction :

int strcmp(chaîne1,chaîne2);

qui retourne :
- 0 si les deux chaînes sont identiques ;
- un nombre négatif si la 1ère est alphabétiquement inférieure à la 2ème ; -
un nombre positif si la 1ère est alphabétiquement supérieure à la 2ème.
8
4

int compare;

Atelier
Exemples : Les chaines de caractères

1) Exemple 1

compare=strcmp(ch1,"salut"); /*compare =0 */
compare=strcmp(ch1,"Bonjour");/*compare prend une valeur positive */

2) Exemple 2

int strncmp(chaîne1,chaîne2,n);
compare les n 1ers caractères de ch1 et ch2.

3) Exemple 3

int strcmpi(chaîne1,chaîne2)
fonctionne comme strcmp() mais ne fait pas distinction entre majuscules et
minuscules.

d. Concaténer deux chaînes

strcat(chaîne1,chaîne2)
Ajoute une copie de chaîne2 à la fin de chaîne1.

strncat(ch1,ch2,n);
Ajoute les n premiers caractères de ch2 à la fin de ch1.

Exemples :

char ch1[30]="Bonjour";
char ch2[20]=" tout le monde";
strcat(ch1,ch2); /*ch1 contient la chaîne "Bonjour tout le monde" */

e. Conversion majuscules-minuscules

strlwr(chaîne)
Convertit toutes les majuscules en minuscules sans changer les autres caractères.

strupr(chaîne)
Convertit toutes les minuscules en majuscules sans changer les autres caractères.
toupper(caractère)
convertit le caractère fourni en paramètre en majuscule.

tolower(caractère)

8
Atelier
strchr(chaîne,caractère)
Les chaines de caractères

convertit le caractère fourni en paramètre


en minuscule.

f. Recherches

retourne un pointeur sur la première occurrence du caractère dans la chaîne ou Null


(=0) si le caractère ne figure pas dans la chaîne.

strrchr(ch,car)
même chose que strchr, mais commence la recherche à partir de la fin de la chaîne.

strstr(chaîne1,chaîne2)
retourne un pointeur sur la première occurrence de ch2 dans ch1 ou Null.
8
6
chaînes
Atelier
Les chaines de caractères
Travail à faire :

Exercice 1 : Traitements sur les

Écrire un programme C qui lit une ligne de texte (ne dépassant pas 100 caractères) la
mémorise dans une variable TXT et affiche ensuite:
a) la longueur L de la chaîne.
b) le nombre de 'e' contenus dans le texte.
c) toute la phrase à l'envers, sans changer le contenu de la variable TXT. d) toute
la phrase à l'envers, après avoir inversé l'ordre des caractères dans TXT:
voici une petite phrase !
! esarhp etitep enu iciov

Exercice 2 : Réécriture de strlen


Écrire un programme C qui simule le fonctionnement de la fonction strlen.

Exercice 3 : Palindrome
Écrire un programme C qui permet de saisir une chaîne de caractères puis de dire si elle
est palindrome. Une chaîne de caractères est dite palindrome si elle peut se lire de
gauche à droite ou de droite à gauche.
Exemples
"elle", "radar", "sos", "1234321", "", "A"...

Exercice 4 : Comparaison de deux chaînes


Écrire un programme qui lit deux chaînes de caractères CH1 et CH2, les compare et
affiche le résultat de cette comparaison.

Exemples
Introduisez la première chaîne : ABC
Introduisez la deuxième chaîne : abc
« ABC » précède « abc »

Exercice 5 : Suppression dans une chaîne


Écrire un programme qui lit un texte TXT (de moins de 100 caractères) et qui enlève
toutes les apparitions du caractère 'e' en décalant les éléments restants. Les
modifications se feront dans la même variable TXT.

Exemple
Cette ligne contient quelques lettres e.
Ctt lign contint qulqus lttrs .

8
7

Atelier
Les chaines de caractères

Exercice 6 : Codage d’un message

On veut écrire un programme C permettant de coder un message qui contient au moins


deux caractères, selon le procédé suivant : Permuter chaque caractère d'indice impair
avec le caractère qui le précède.
Exemple
Le codage de la chaîne de caractères : "Baccalauréat" donne "aBcclauaérta"

Exercice 7 : Chaîne la plus longue


Écrire un programme C qui saisit un tableau Tch de n chaînes de caractères, cherche et
affiche la longueur de la chaîne la plus longue puis toutes les chaînes ayant cette
longueur.

Vous aimerez peut-être aussi