Vous êtes sur la page 1sur 18

Les chaînes de caractères

Le type « chaîne » n’existe pas en langage C.


En langage C:
Une chaîne de caractères est un tableau d’élément de type char.

Dont le dernier élément est le caractère nul ‘\0’.


 Ce caractère n’est pas affichable.
 Il indique la fin de la chaîne de caractères.

Exemple:
La chaîne "Bonjour" est représentée par :

B o n j o u r \0

Bases de la programmation en C++ 1


Comment déclarer une chaîne de caractères
On déclare un tableau de caractères.
De taille LongeurChaine + 1 (réservation de place en
mémoire)
B o n j o u r \0

char Nom_du_tableau[Nombre_elements + 1] ;

On peut mettre une taille max (ex: 200). La chaîne se terminera au
‘\0’. (on aura réserver de la place pour rien)

Exemples
char mot [ 50 + 1] ;
char phrase [ 250 ] ;

Bases de la programmation en C++ 2


Initialisation d’une
chaîne
Caractère par caractère
char mot [3 +1 ]; //déclaration

//Initialisation
mot [0] =‘a’;
mot [1] =‘i’;
mot [2] =‘e’;
mot [3] =‘\0’;

A la déclaration
//comme un tableau
char phrase [200] = { 'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0' };
// spécifique aux chaîne de caractères
// le caractère de fin de chaîne '\0' est géré automatiquement
char phrase [200] = "Bonjour" ;
// On a réservé de la place pour rien. On a besoin de seulement d’un tableau
de longueur 8 (7 pour "Bonjour" + caractère null ‘/0’)
Bases de la programmation en C++ 3
Initialisation d’une
chaîne
A la déclaration
// On peut ne pas attribuer la taille de tableau lors de l’initialisation.
// La taille du tableau sera égale à la longueur de la chaine de caractères
// + le caractère null \0 qui sera ajouté à la fin du tableau automatiquement.

char phrase [] = { 'B', 'o', 'n', 'j', 'o', 'u', 'r', '\0' };

char phrase [] = "Bonjour" ;

Bases de la programmation en C++ 4


Initialisation d’une
chaîne
Exemple
char MonMot [4 + 1] ; // réservation de place en mémoire
MonMot [0] = ‘M’; //initialisation caractère par caractère
MonMot [1] = ‘i’;
MonMot [2] = ‘a’;
MonMot [3] = ‘m’;
MonMot [4] = ‘\0’;

// Déclaration + initialisation
// initialisation comme un tableau classique
char MonMot [4 + 1] = { ‘M’, ‘i’, ‘a’, ‘m’, ‘\0’ } ;

// Déclaration + initialisation
//Spécifique aux chaînes de caractères
char MonMot [4 + 1] = "Miam" ;
// le ‘\0’ est rajouté automatiquement

Bases de la programmation en C++ 5


Caractères spéciaux
\0 caractère de fin de chaîne
\" guillemet
\\ barre oblique.
\n retour à la ligne

cout<<"PinPon"; > PinPon

cout<<"Pin\0Pon"; > Pin

cout<<"Pin\\Pon"; > Pin\Pon

cout<<"Pin\nPon"; > Pin


Pon

Bases de la programmation en C++ 6


Exempl
e
int LongueurChaine( char ch[ ] ); // Déclaration de la fonction LongueurChaine

int main()
{
char chaine[255] = "Bonjour";
int longueur = LongueurChaine(chaine);
cout<<longueur<<endl; // Le programme affiche 7
}

/* Définition de la fonction LongueurChaine. */


int LongueurChaine( char ch[ ] )
{
int i = 0;
while ( ch[i] != ‘\0’) // on parcours la chaîne jusqu’à arriver au caractère ‘\0’
i++;
return i;
}

Bases de la programmation en C++ 7


Restrictio
n
On ne peut pas affecter une chaîne en dehors de la déclaration.
char mot[8] = "bonjour"; // OK

char mot[8] ;
mot = "bonjour"; // ERREUR

On ne peut pas affecter une chaîne à une autre.


char mot1[8] ;
char mot2[8] ; // déclaration de deux chaînes

mot1 = mot2; // ERREUR

On ne peut
charpas comparer
mot1[8] deux chaînes
, char mot2[8] . de deux chaînes
;// déclaration

if(mot1 == mot2) // ERREUR

Bases de la programmation en C++ 8


Lecture d’une chaine de
caractères
En utilisant scanf()
Use %s field specification in scanf to read string
• ignores leading white space
• reads characters until next white space encountered
• C stores null (\0) char after last non-white space char
• Reads into array (no & before name, array is a pointer)
• Example: char Name[11]; scanf(“%s”,Name);
• Problem: no limit on number of characters read (need one for
delimiter), if too many characters for array, problems may occur

Bases de la programmation en C++ 9


Lecture d’une chaine de
caractères
En utilisant gets()
The drawback of reading a string using scanf() is that it does not
read whitespaces or whole line • If the string to be read as an
input has embedded whitespace characters, use standard gets()
function.

Bases de la programmation en C++ 10


Exempl
e
int main()
{
// on déclare 2 chaînes
char chaine1[20] = "bonjour"; > Ecrivez votre nom
char chaine2[20];
Adel
}
> bonjour Adel

Bases de la programmation en C++ 11


Ecriture d’une chaine de caractères

En utilisant printf()
Use %s field specification in printf: characters in string printed
until \0 encountered char Name[10] = “Rich”; printf(“|
%s|”,Name); /* outputs |Rich| */ • Can use width value to print
string in space: printf(“|%10s|”,Name); /* outputs | Rich| */ • Use
- flag to left justify: printf(“|%-10s|”,Name); /* outputs |Rich | */

Bases de la programmation en C++ 12


Lecture d’une chaine de
caractères
En utilisant puts()
The drawback of printing a string using printf() is that it does not
print whitespaces. • If the string to be print as an output has
embedded whitespace characters, use standard puts() function.

Bases de la programmation en C++ 13


Exempl
e
int main()
{
// on déclare 2 chaînes
char chaine1[20] = "bonjour"; > Ecrivez votre nom
char chaine2[20];
Adel
}
> bonjour Adel

Bases de la programmation en C++ 14


Fonctions de la bibliothèque
standard
Fonctions de manipulation de chaînes de caractères. (définies dans
string.h).
Strlen ( char Ch[ ])
 Retourne la longueur de la chaîne Ch.

Strcpy ( char ChDest[ ] , char ChSource[ ] )


 Copie la chaîne ChSource dans ChDest.

Strcmp ( char Ch1[ ] , char Ch2[ ])


 Retourne 0 si les 2 chaînes sont identiques.

Strcat (char ChDest[ ] , char ChSource[ ] )


 Recopie la chaine ChSource à la suite de ChDest.

Bases de la programmation en C++ 15


Exempl
e
int main()
{
// on déclare 2 chaînes
char chaine1[20] = "bonjour"; > Ecrivez votre nom
char chaine2[20];
Adel
// L’utilisateur rentre chaine2
printf("Ecrivez votre nom"); > bonjour Adel
scanf("%s", &chaine2);

//on ajoute un espace à chaine1


strcat(chaine1," ");

//on ajoute chaine2 à chaine1


strcat(chaine1,chaine2);
printf("%s", chaine1);
}

Bases de la programmation en C++ 16


Exempl
e
int main()
{
// on déclare 2 chaînes
char chaine1[20] = "bonjour";
char chaine2[20];

// On copie le contenu de chaine1


dans chaine2
strcpy(chaine2, chaine1);
printf("%s", chaine2); bonjour
// On compare si les deux chaines les deux chaines sont identiques
// sont identique
if(strcmp(str, str2) == 0) {
printf("les deux chaines sont identiques");
}
}

Bases de la programmation en C++ 17


Exempl
e
int main()
{
// on déclare une chaîne
char chaine1[20] = "bonjour";
int longueur;
// Calcul de longueur de la chaine1
longueur = strlen(chaine1);
printf(" La longueur de la chaine égale à %d", longueur);
}

La longueur de la chaine égale à 7

Bases de la programmation en C++ 18

Vous aimerez peut-être aussi