• Aucun résultat trouvé

_________________________________________________________________________________________________________________

Les chaînes de caractères

• Une chaîne de caractères est un type particulier de données qui se présente comme une série de caractères alphanumériques.

• En C/C++, les chaînes de caractères sont considérées comme des cas particuliers des tableaux de caractères et sont d’ailleurs déclarées de la même manière que ces derniers.

• Toutefois, les chaînes se distinguent par rapport aux simples tableaux de caractères par le fait qu'elles se terminent toujours par un caractère spécial codé sur un octet ayant la valeur ‘\0’ appelé le zéro de fin de chaînes. Ce dernier ne doit pas être confondu avec le caractère 0 dont le code ASCII est 48.

Remarque :

La bibliothèque standard (STL) fournie avec le langage C++ dispose d'une classe string qui offre tous les outils nécessaires pour la manipulation des chaînes en termes de copie, de concaténation, etc.

Déclaration d'une chaîne

• La déclaration d'une chaîne de caractères est faite comme suit : char NomChaine[Taille];

• La taille d’un tableau de caractères doit être suffisante pour contenir le zéro de fin de chaîne. Ainsi une chaîne déclarée avec une taille de 10 ne peut contenir au plus que 9 caractères utiles. [Le compilateur ne procède à aucune vérification].

char message[10] ; // chaîne de 9 caractères

Initialisation d'une chaîne

• Une chaîne de caractères peut être initialisée comme suit :

char ch1={'A','B','C','\0'} ; ou également char ch2[]= "abc";

• L'affectation globale d'une constante chaîne de caractère à une variable de type chaîne n'est permise que lors d'une initialisation. Ainsi l'instruction suivante provoque une erreur.

char ch3[5];

ch3="abc"; /* donne une erreur */

• La spécification de la taille d'une chaîne lors de sa déclaration n'est pas nécessaire si cette déclaration est suivie d'une initialisation.

char msg []= "Bonjour" ;

char phrase[]= "ceci est une phrase" ;

• La taille de msg n’est pas fixée mais dépend de la taille de la chaîne d’initialisation. Dans le cas présent, ce tableau occupe 8 octets, le premier contenant ‘B’ et le dernier est le zéro de fin de chaîne.

Initialisation d’un tableau de caractères à deux dimensions.

char buf[3][10]={" Ali ", " Mohamed ","Salah"};

Les chaînes de caractères Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Saisie et affichage d'une chaîne de caractères

La saisie

La saisie d'une chaîne peut se faire à l’aide de la fonction scanf en utilisant le caractère de formatage %s ou également à l’aide de la fonction gets dont la syntaxe est la suivante :

char* gets(char *NomChaîne); (stdio.h)

• La fonction gets retourne la chaîne saisie en cas de succès et NULL en cas d'échec.

• La fonction gets arrête la saisie des caractères lorsque l'utilisateur tape le caractère \n indiquant un retour à la ligne. Elle remplace alors ce caractère par \0.

L'affichage

L'affichage d'une chaîne peut se faire à l’aide de la fonction printf en utilisant le caractère de formatage %s ou également à l’aide de la fonction puts dont la syntaxe est la suivante :

int puts(const char* NomChaîne); (stdio.h)

Cette fonction retourne une valeur non négative en cas de succès. En cas d'échec elle retourne EOF. Elle remplace le caractère \0 de la chaîne par \n.

Exemple 1

# include<stdio.h> void main( ) {

char ligne[81] ;

printf(" donnez une chaîne ") ; scanf(" %s ", ligne) ;

printf(" la ligne saisie est : %s\n ",ligne) ; }

Exemple 2

#include <stdio.h> void main( ) {

char tab[]= "Bonjour";

printf("Affichage du contenu d’un tableau de caractères : \n " ) ; printf(" %s ",tab) ; } Exemple 3 #include <stdio.h> void main( ) {

char tab[]= "Bonjour” ;

/* puts réalise un retour automatique à la ligne */

puts(" Affichage du contenu d’un tableau de caractères : " ) ; puts(tab) ;

}

Affectation entre chaînes de caractères

L’affectation directe entre chaînes n'est pas permise en C/C++ car il n'est pas possible de faire une affectation globale entre tableaux. Pour cela, il est nécessaire de passer par la fonction strcpy.

Prototype :

char *strcpy( char *Destination, const char *Source ); Bibliothèque: (string.h)

Valeur de retour: Destination.

Action: Elle copie la chaîne Source dans la chaîne Destination. Aucune valeur de retour n'a été prévue pour indiquer une erreur.

Les chaînes de caractères Programmation orientée objet (C++) _________________________________________________________________________________________________________________ Exemple : # include <string.h> # include <stdio.h> void main( ) {

char string1[10], string2[10]=”abcdef”; strcpy(string1,string2);

printf(" %s\n”,string1); }

Longueur d'une chaîne

La fonction strlen permet de déterminer le nombre de caractères présents dans une chaîne sans tenir compte du zéro de fin de chaîne.

Prototype:

size_t strlen( const char *string ); Bibliothèque: string.h

Valeur de retour: nombre de caractères

Exemple : #include<string.h> #include<stdio.h> void main( ) { int nb; char ch[20]; strcpy(ch,”Bonjour”); nb=strlen(ch);

printf(" le nombre de caractères est %d ",nb) ; }

Comparaison de deux chaînes de caractères

Ordre lexicographique des chaînes

On appelle ordre lexicographique, l'ordre dans lequel les mots sont rangés dans un dictionnaire. Il est défini mathématiquement de la façon suivante :

Soit A et B deux mots que l'on peut considérer comme des valeurs de variables de type chaîne.

Exemples : "ARBRE" < "ARBRES" "ARBRE" < "ARBRE " "ARBRE" > "ARBORESENCE" "ARBRE" < "ARBUSTE" Remarque :

En C/C++, les opérateurs = =, < ,> ,<= et >= ne permettent pas de comparer le contenu de deux chaînes. Il faut dans ce cas passer par la fonction strcmp qui effectue une comparaison sur la base de l'ordre lexicographique susmentionné.

Prototype : int strcmp( const char *Chaîne1, const char * Chaîne2 );

A ” B si et seulement si

Long(A) ” Long(B) et quel que soit i ” Long(A), A[ i ] = B[ i ] . Ou s'il existe:

i, 1” i ” min{ Long(A), Long(B) }, tel que :

Les chaînes de caractères Programmation orientée objet (C++) _________________________________________________________________________________________________________________ Bibliothèque : string.h

Valeur renvoyée : une valeur entière qui est : • < 0 si Chaîne1 est inférieure à Chaîne2 • = = 0 si Chaîne1 es égale à Chaîne2 • 0 si Chaîne1 est supérieur à Chaîne2.

Exemple 1 : # include <string.h> # include <stdio.h> void main( ) { int resultat; char ch1[]=”ARBUSTE ”; char ch2[]=”ARBRE ”; char ch3[]=”ARBORESENCE ”; resultat = strcmp(ch1,ch2); if(resultat>0)

printf("ch1 est supérieure à ch2\n ") ; else

printf("ch1 est inférieure à ch2\n ") ; resultat = strcmp (ch2,ch3) ;

if( resultat > 0 )

printf("ch2 est supérieure à ch3\n ") ; else

printf("ch2 est inférieure à ch3\n ") ; } Exemple 2 : # include <string.h> # include <stdio.h> void main( ) { char ch1[10], ch2[10]; int resultat; strcpy(ch1,"Bonjour"); printf("contenu de ch : %s\n",ch1); printf(" deuxième chaîne ? ") ; scanf(" %s ",ch2) ;

resultat = strcmp(ch1,ch2); if(resultat ==0)

printf("les deux chaînes sont identiques ") ; else

printf("les deux chaînes sont différentes ") ; }

Concaténation de deux chaînes

Concaténer deux chaînes consiste à les unir pour obtenir une seule en copiant la deuxième à la fin de la première. La concaténation en C/c++ est réalisée avec la fonction strcat dont le prototype se présente comme suit :

Prototype: char* strcat(char *Chaîne1, const char * Chaîne2); Bibliothèque: string.h

Valeur de retour: La chaîne chaîne1 qui contient le résultat de la concaténation de chaîne1 et chaîne2.

Exemple : # include <string.h> # include <stdio.h> void main( ) { char Destination[30]; char Ch1[10]= "Turbo " , Ch2[2]= " " , Ch3[5]= "C "; strcpy(destination,Ch1) ; strcat(destination, Ch2); strcat(destination, Ch3); puts(destination); }

Les chaînes de caractères Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Recherche d’un caractère dans une chaîne

La fonction strchr cherche la première occurrence d'un caractère dans une chaîne. Prototype: char*strchr(const char *Str, char car );

Bibliothèque : string.h

Valeur de retour : un pointeur sur la première occurrence du caractère car dans la chaîne Str et NULL si le caractère considéré ne figure pas dans la chaîne.

Exemple : #include<string.h> #include<stdio.h> void main() { char String[15], *ptr, c=’r’; strcpy(String,”Voici une chaine”); ptr=strchr(String,c) ;

if(ptr)

printf(“Le caractère %c est dans la position: %d\n”,c,ptr-String+1) ; else

printf(« caractère non détecté.\n » ) ; }

La gestion dynamique de la mémoire Programmation orientée objet (C++) _________________________________________________________________________________________________________________

La gestion dynamique de la mémoire