Vous êtes sur la page 1sur 25

Les tableaux

Les tableaux 1

1) Définition

▪ Problématique ?

Exemple

Pour conserver simultanément les notes de 10 étudiants, il nous faut 10 variables différentes.

→ Vous devez initialiser et gérer chaque variable individuellement

→ Pour effectuer des opérations telles que la somme des notes, la moyenne, la recherche de la note la plus élevée, etc., vous devez

écrire du code répétitif pour parcourir toutes les variables.

et si on avait 100 ou 1000 étudiants?!!

Utiliser une structure qui nous permet de stocker ces données

1
Les tableaux 2

1) Définition

▪ Un tableau est une collection d'éléments de données similaires stockés dans des emplacements de mémoire contigus.

▪ Les éléments sont accessibles à l'aide des indices.

▪ Les éléments peuvent être de différents types de données.


10
➢ primitifs : int, float, double, char, etc. Tableau T 15
20
➢ dérivés : les structures, les pointeurs, etc.

▪ Un tableau peut avoir plus d'une dimension (matrice 2D, matrice 3D, ..)

▪ La déclaration et l'utilisation des tableaux en C++ sont les mêmes que celles du langage C.
Mémoire

Remarque : Si un programme en C++ ou dans un langage similaire ne peut pas trouver


d'emplacements de mémoire contigus pour stocker un tableau statique,
→ il générera généralement une erreur lors de la compilation ou de l'exécution.

Les tableaux 3

2) Tableaux à une dimension (vecteur)

► Déclaration
▪ Pour déclarer un tableau à une dimension en C++, on utilise la syntaxe suivante :
➢ Syntaxe :
type NomTableau [Taille];
➢ Exemples :
int TabEntiers [10] ; // Cette déclaration définit un tableau d’entiers de taille 10
float TabReels [20] ; // Cette déclaration définit un tableau de réels de taille 20

▪ La taille d’un tableau peut également être déclarée comme une constante:
const int N=10 ; // Cette déclaration définit la taille du tableau sous forme d’une constante
int TabEntiers [N] ; // Cette déclaration définit un tableau d’entiers de taille N

2
Les tableaux 4

2) Tableaux à une dimension (vecteur)

► Accès aux éléments du tableau


▪ Pour accéder à un tableau à une dimension en C++, on utilise la syntaxe suivante :
➢ Syntaxe
NomTableau [Indice];
➔ La numérotation d’un tableau commence toujours à partir de 0.
➔ Dans un tableau de N éléments, le premier indice est (0) et le dernier indice est (N-1)

➢ Exemple :
Tab [4] ; // Accéder à l’élément numéro 5 de tableau Tab

Tab Taille du tableau : 10


Premier indice : 0
0 1 2 3 4 5 6 7 8 9
Dernier indice : 9

Les tableaux 5

2) Tableaux à une dimension (vecteur)

► Initialisation du tableau
▪ Pour initialiser un tableau à une dimension en C++, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille] = {Valeur1, Valeur2,…, Valeur_N-1} ;

➢ Exemple :
int Tab [5] = {1,2,3,4,5} ; // Cette déclaration définit un tableau d’entiers de taille (5) initialisé par les valeurs (1, 2, 3, 4, 5)
➔ Le nombre des valeurs d'initialisation ne peut pas dépasser la taille du tableau, mais il peut être inférieur.
➔ Les éléments qui ne sont pas initialisés explicitement seront initialisés implicitement (automatiquement) à 0

Lors de l'initialisation d'un tableau, la spécification de sa taille est facultative (optionnelle).


➔ La taille est automatiquement déterminée d'après le nombre des valeurs d'initialisation
int Tab [ ] = {1,2,3,4,5} ; // La taille est du tableau est égale à 5

3
Les tableaux 6

3) Tableaux multidimensionnels

► Déclaration
▪ En plus des tableaux à une seule dimension (vecteur), le C++ autorise la déclaration des tableaux à plusieurs dimensions.
▪ Pour déclarer un tableau multidimensionnel, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille_D1] [Taille_D2] … [Taille_Dn]; // Taille_Di désigne la taille de la ième dimension

➢ Exemple :
Pour déclarer un tableau de deux dimensions (une matrice)
int Tab [2][5] ; // Cette déclaration définit un tableau d’entiers à 2 dimensions avec 2 lignes et 5 colonnes

0 1 2 3 4
Taille du tableau 2D : 2 lignes | 5 colonnes
0
Tab Premier indice (ligne) : 0 | Dernier indice (ligne) : 1
1 Premier indice (colonne) : 0 | Dernier indice (colonne) : 4

Les tableaux 7

3) Tableaux multidimensionnels

► Accès aux éléments du tableau


▪ Pour accéder à un tableau multidimensionnel en C++, on utilise la syntaxe suivante :
➢ Syntaxe
NomTableau [Indice_D1] [Indice_D2] … [Indice_Dn]; // Indice_Di désigne l’indice de l’élément de la ième dimension

➢ Exemple :
Pour accéder à un tableau à deux dimensions :
Tab [1][3] ; // Accéder à l’élément situé dans la 1ère ligne / 3ème colonne de tableau Tab

0 1 2 3 4
0 Taille du tableau 2D : 2 lignes | 5 colonnes
Tab
Premier indice (ligne) : 0 | Dernier indice (ligne) : 1
1
Premier indice (colonne) : 0 | Dernier indice (colonne) : 4

4
Les tableaux 8

3) Tableaux multidimensionnels

► Initialisation du tableau
▪ Pour initialiser un tableau multidimensionnel en C++, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [Taille_D1] [Taille_D2] … [Taille_Dn] = {Valeur1,1,…, Valeur_N*N} ;

➢ Exemple :
L’initialisation d’un tableau à deux dimensions peut être effectué de deux manières :
int Tab [2][5] = {1,2,3,4,5,6,7,8,9,10} ; // Initialisation élément par élément du tableau 2d d’entiers (1ère méthode)
int Tab [2][5] = { {1,2,3,4,5},{6,7,8,9,10} } ; // Initialisation ligne par ligne du tableau 2d d’entiers (2ème méthode)

➔ Les éléments qui ne sont pas initialisés explicitement seront initialisés implicitement (automatiquement) à 0
0 1 2 3 4
0 1 2 3 4 5
Tab
1 6 7 8 9 10

Les tableaux 9

4) Opérations sur les tableaux

► Affectation des valeurs aux éléments d'un tableau


▪ Pour affecter une valeur à un élément du tableau en C++, on utilise la syntaxe suivante :
➢ Syntaxe
type NomTableau [indice] = Valeur ;
➢ Exemple :
int Tab [3] = 10 ; // Affectation de la valeur 10 au 4ème élément du tableau Tab

Remarques :
❑ Les indices peuvent être des expressions arithmétiques :
Tab [2*i] ou Tab[i+3][j-2]

5
Les tableaux 10

4) Opérations sur les tableaux

► Incrémentation et décrémentation des éléments d'un tableau


▪ L’incrémentation et la décrémentation d’un élément du tableau peuvent être effectuées comme suit :
➢ Syntaxe :
NomTableau [Indice] ++ ; NomTableau [Indice] -- ;

➢ Exemple :
int Tab [3] = 10 ; Tab [3] ++ ; // Tab [3] vaut 11

Les tableaux 11

4) Opérations sur les tableaux

► Détecter la taille d’un tableau


▪ En C++, il est important de noter que les tableaux n'incluent généralement pas d'informations sur leur taille intrinsèque.
→ La taille du tableau doit être gérée manuellement.
→ Pour ce faire, vous pouvez utiliser l'opérateur sizeof() pour déterminer la taille en octets du tableau entier. Ensuite, vous pouvez
diviser cette taille par la taille d'un élément individuel pour obtenir le nombre d'éléments.
➢ Syntaxe :
int taille = sizeof(tableau) / sizeof(tableau[0]);
➢ Exemple :

int Tab [] = {1, 2, 3, 4, 5};


Résultat ?
// Taille du tableau en octets
TailleOct =20 // Taille en octets (5*4)
int TailleOct = sizeof(Tab);
TailleNbe = 5 // nombre d’éléments (20/4)
// Taille du tableau en termes du nombre d'éléments
int TailleNbe = sizeof(Tab)/sizeof(Tab[0]);

6
Les tableaux 12

4) Opérations sur les tableaux

► Modifier la taille d’un tableau


▪ La modification de la taille d'un tableau dépend du langage de programmation que vous utilisez.
▪ En C++, les tableaux sont généralement de taille fixe.
→ ce qui signifie que la taille d'un tableau est définie à la compilation et ne peut pas être modifiée pendant l'exécution du programme.
→ vous ne pouvez pas modifier la taille directement.
→ vous devrez généralement créer un nouveau tableau de la taille souhaitée et copier les éléments du tableau d'origine dans le nouveau
tableau.
➢ Exemple :

int TabOriginal [5] = {1, 2, 3, 4, 5}; // Copiez les éléments de l'ancien tableau dans le nouveau
int nouvelle_taille = 10; // Nouvelle taille souhaitée for (int i = 0; i < 5; i++) {
int NouvTab[nouvelle_taille]; // Créez un nouveau tableau NouvTab[i] = TabOriginal[i];
}
// Vous pouvez maintenant utiliser NouvTab avec une taille de 10.

Les tableaux 13

4) Opérations sur les tableaux

► Insérer un nouvel élément dans un tableau


▪ En C++, il n'existe pas de fonction prédéfinie pour insérer un nouvel élément dans un tableau statique.
▪ Vous devez suivre plusieurs étapes (si la taille n’est pas suffisante):
1. Créé un nouveau tableau
Vous devez créer un nouveau tableau avec une taille augmentée de 1 pour accueillir le nouvel élément.
2. Copiez les éléments dans le nouveau tableau
3. Déterminez où vous voulez insérer l'élément.
Vous devez savoir si vous souhaitez insérer l'élément au début, au milieu ou à la fin du tableau.
4. Décalez les éléments existants
Si vous insérez l'élément au milieu ou au début du tableau, vous devrez décaler les éléments existants pour faire de la place.
5. Insérez le nouvel élément
Une fois que vous avez fait de la place en décalant les éléments existants, vous pouvez insérer le nouvel élément à l'emplacement
souhaité.

7
Les tableaux 14

4) Opérations sur les tableaux

► Insérer un nouvel élément dans un tableau


▪ Par exemple:
0 1 2 3 4 0 1 2 3 4 5
Étape 1+2 10 20 40 50 60 10 20 40 50 60

Étape 3 : On souhaite insérer la valeur 30 à la 3ème position (index 2)

Position d’insertion Décalage des éléments

0 1 2 3 4 5 0 1 2 3 4 5
Étape 4 : 10 20 40 50 60 10 20 40 40 50 60

0 1 2 3 4 5
Étape 5 : 10 20 30 40 50 60

Les tableaux 15

4) Opérations sur les tableaux

► Supprimer un élément d’un tableau


▪ En C++, il n'existe pas de fonction prédéfinie pour supprimer un élément d’un tableau statique.
▪ Vous devez suivre plusieurs étapes:
1. Déterminez l'élément à supprimer
Vous devez connaître l'index de l'élément que vous souhaitez supprimer du tableau.
2. Vérifiez que l'index est valide
Assurez-vous que l'index de l'élément à supprimer est dans les limites du tableau.
3. Décalez les éléments
Si l'index est valide, décalez les éléments du tableau pour remplir l'espace laissé par l'élément supprimé.
4. Réduisez la taille du tableau
Si le tableau est statique (de taille fixe), vous pouvez réduire sa taille de 1, car vous avez supprimé un élément.

8
Les tableaux 16

4) Opérations sur les tableaux

► Supprimer un élément d’un tableau


▪ Par exemple:

Étape 1 + 2 : On souhaite supprimer l’élément de la position 1 (index 0)

Étape 3 :
Position de l’élément à Décalage des éléments
supprimer
0 1 2 3 4 5 0 1 2 3 4 5
10 20 30 40 50 60 20 30 40 50 60 60

0 1 2 3 4 5
Étape 4 : 20 30 40 50 60 60

Continuer le programme avec une taille -1 Il demeure stocké en mémoire

Les tableaux 17

4) Opérations sur les tableaux

► Affectation d’un tableau à un autre


▪ En C++, l'affectation d'un tableau à un autre ne peut pas être effectuée en utilisant simplement l'opérateur =.
→ L'opérateur = est principalement utilisé pour affecter une valeur à une variable simple
→ Cependant, il existe d'autres moyens de copier le contenu d'un tableau vers un autre.

➢ Exemple :
int T1 [4] = {2, 3, 5, 7};
Solution ?
int T2 [4] ;
Utiliser une boucle pour copier les
T2 = T1 ; // instruction incorrecte. ×
éléments un par un

9
Les tableaux 18

4) Opérations sur les tableaux

► Comparaison de deux tableaux


▪ Contrairement à la comparaison de deux variables, vous ne pouvez pas comparer deux tableaux en C++ en utilisant l'opérateur ==
→ car il compare simplement les adresses mémoire de ces tableaux (c.-à-d. les adresses de début de chaque tableau)
→ ce qui signifie que deux tableaux identiques ne renverront pas true (vrai) lors de la comparaison avec == puisqu'ils pointent vers des
emplacements mémoire différents.
→ ce qui ne donne pas le résultat attendu.

Ce n’est pas le résultat attendu !!!


➢ Exemple : Alors quelle est la solution pour
comparer deux tableaux ???
int T1 [4] = {2, 3, 5, 7};
int T2 [4] = {2, 3, 5, 7};
Affichage ?
if (T1 == T2)
Tableaux différents.
cout<<"Tableaux identiques.";
else
cout<<"Tableaux différents.";

Les tableaux 19

4) Opérations sur les tableaux

► Comparaison de deux tableaux


▪ Solution ? Pour comparer le contenu de deux tableaux de même taille en C, vous devez utiliser une boucle pour comparer les éléments
individuels du tableau un par un.

#include <iostream> if (egaux==true) {


using namespace std; cout<<"Les tableaux sont identiques. "<<endl;
int main() { } else {
int T1 [4] = {2, 3, 5, 7}; cout<<"Les tableaux ne sont pas identiques. "<<endl;
int T2 [4] = {2, 3, 5, 7}; }
int i ; bool egaux = true;
for (i = 0; i < 4 ; i++) { return 0;
if (T1[i] != T2[i]) { }
egaux = false; break;
}
}

10
Les tableaux 20

4) Saisie et affichage des éléments d'un tableau

► Saisie des éléments d'un tableau


▪ La saisie des éléments d'un tableau d’entiers de taille 5 se fait comme suit :
int Tab [5] ; // Déclaration d’un tableau d’entiers de taille 5
int i ; // Déclaration d’une variable i (compteur)
for(i=0 ; i < 5 ;i++) {
cout<<"Donner l’entier numéro "<< i <<" : " ;
cin>>Tab[i] ;
}
► Affichage des éléments d'un tableau
int Tab [5]={1,2,3,4,5} ; // Déclaration d’un tableau d’entiers de taille 5
int i ; // Déclaration d’une variable i (compteur)
for(i=0 ; i < 5 ; i++) {
cout<<" Tab["<< i <<"] : "<< Tab[i] ;
}

Les tableaux 21

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions.

▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).

11
Les tableaux 22

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de remplir et afficher un tableau d'entiers à deux dimensions (Taille 2×4).
Solution :

#include <iostream> // Remplissage du tableau // Affichage du tableau


using namespace std; for (i=0; i<ligne ; i++){ for (i=0; i<ligne ; i++){
int main(){ for (j=0; j<colonne ; j++){ for (j=0; j<colonne ; j++){
int i , j ; // Déclaration des compteurs cout << " Donner Tab [" <<i<<"]["<< j<<"] : " ; cout << tab[i][j] <<" ";
const int ligne = 2 ; cin>>tab[i][j]; }
const int colonne = 3 ; } cout << endl ;
// Déclaration d'un tableau de taille 2 * 4 }
int tab[ligne][colonne]; return 0;}

Les tableaux 23

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
➢ Principe :
▪ Le tri à bulle consiste à parcourir le tableau, par exemple de gauche à droite, en comparant les éléments côte à côte et en les
permutant s'ils ne sont pas dans le bon ordre.
▪ Au cours d'une passe du tableau, les plus grands éléments remontent de proche en proche vers la droite comme des bulles vers
la surface.
▪ Condition d’arrêt ?
On s'arrête dès que l'on détecte que le tableau est trié : si aucune permutation n'a été faite au cours d'une passe.

… ? ? …
i i+1

12
Les tableaux 24

4) Saisie et affichage des éléments d'un tableau

► Exercices
➢ Exemple : Donnée : Tableau de 5 entiers [N=5] || Parcours du tableau 0 → N-1
Test = vrai (il y a une permutation) || Test = Faux (pas de permutation)

borne Test = Vrai

Étape 1 : i=0 ; T[0] > T[1] ✓ 7 3 18 13 7 3 7 18 13 7 Test = Vrai

Étape 2 : i=1 ; T[1] > T[2] × 3 7 18 13 7 3 7 18 13 7 Test = Faux

Étape 3 : i=2 ; T[2] > T[3] ✓ 3 7 18 13 7 3 7 13 18 7 Test = Vrai

Étape 4 : i=3 ; T[3] > T[4] ✓ 3 7 13 18 7 3 7 13 7 18 Test = Vrai

Étape 5 : i=4 ; (i < N -1) × 3 7 13 7 18 3 7 13 7 18


[Test = Vrai ]➔ continuer

Les tableaux 25

4) Saisie et affichage des éléments d'un tableau

► Exercices
➢ Exemple :
borne Test = Vrai

Étape 6 : i=0 ; T[0] > T[1] × 3 7 13 7 18 3 7 13 7 18 Test = Faux

Étape 7 : i=1 ; T[1] > T[2] × 3 7 13 7 18 3 7 13 7 18 Test = Faux

Étape 8 : i=2 ; T[2] > T[3] ✓ 3 7 13 7 18 3 7 7 13 18 Test = Vrai

Étape 9 : i=3 ; (i < N -1) × 3 7 7 13 18 3 7 7 13 18


[Test = Vrai ]➔ continuer

13
Les tableaux 26

4) Saisie et affichage des éléments d'un tableau

► Exercices
➢ Exemple :
borne Test = Vrai

Étape 10 : i=0 ; T[0] > T[1] × 3 7 7 13 18 3 7 7 13 18 Test = Faux

Étape 11 : i=1 ; T[1] > T[2] × 3 7 7 13 18 3 7 7 13 18 Test = Faux

Étape 12 : i=2 ; (i < N -1) × 3 7 7 13 18


[Test = Faux ]➔ arrêter

Test = Faux ⇔ pas de permutation =Tableau trié 3 7 7 13 18

Les tableaux 27

4) Saisie et affichage des éléments d'un tableau

► Exercices
▪ Écrire un programme permettant de trier dans un ordre croissant un tableau d'entiers (en utilisant l’algorithme de tri à bulle).
Solution :

include <iostream> while (test == true){ // Affichage du tableau


using namespace std; test = false ; for (i=0; i<n ; i++){
int main(){ for (i=0 ; i<borne-1 ; i++){ cout << tab[i] <<" ";
const int n = 5 ; // Déclaration de la taille du tableau if (tab[i]>tab[i+1]){ }
// Déclaration + initialisation d'un tableau d'entier aux = tab[i] ; return 0;
int tab[n] = {7, 3, 18, 13 , 7}; tab[i] = tab[i+1] ; }
bool test ; tab[i+1] = aux;
int i, aux, borne ; test = true ; }
test = true ; }
borne = n ; borne -- ;
}

14
Les chaînes de caractères

Les chaînes de caractères 1

1) Introduction

▪ 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.

▪ Elle peut contenir des :

→ lettres, par exemple A, B, x , z, …

→ nombres, par exemple 1, 8, 15 , 39, …

→ symboles, par exemple !, ?, @ , …

▪ C++ fournit les deux types suivants pour la représentation des chaînes de caractères :

→ Les chaînes de caractères de style C.

→ La classe String introduit avec le Standard C++.

15
Les chaînes de caractères 2

2) Les chaînes de caractères de style C++

▪ Les chaînes de caractères en C++ sont traitées comme des variables.

→ Ces variables contiennent une collection de caractères entourés de guillemets.

▪ Elles sont d’ailleurs déclarées de la même manière que les autres types de variables .

Exemples : "Bonjour" , "numéro 1", " adresse@serveur.com"

Les chaînes de caractères 3

2) Les chaînes de caractères de style C++

► Déclaration

▪ La déclaration d'une chaîne de caractères se fait comme suit :

➢ Syntaxe

string NomChaine ;

➢ Exemple

string message ; // déclaration d’une variable « message » de type « string »

16
Les chaînes de caractères 4

2) Les chaînes de caractères de style C++

► Initialisation

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

➢ Syntaxe

string NomChaine = "chaine de caractère" ;

➢ Exemple

string ch; // Déclaration d’une variable “ch” de type “string”

ch="abcd"; // initialisation de la chaine de caractères “ch”

Les chaînes de caractères 5

2) Les chaînes de caractères de style C++

► Saisie

▪ La lecture d’une chaîne de caractères peut être effectuée comme suit :


Question : Pourquoi on n’utilise
➢ Syntaxe
pas cin ?
getline(cin, NomChaine);

➢ Exemple
Réponse :
string ch; // Déclaration d’une variable “ch” de type “string”
cin ne peut lire qu’un seul mot et non pas
getline(cin, ch); une chaine (suite de mots)
Exemple :
cin >>chaine ; (avec chaine= "Bonjour LSI2“)
Bonjour

17
Les chaînes de caractères 6

2) Les chaînes de caractères de style C++

► Affichage

▪ L’affichage d’une chaîne de caractères peut être effectué comme suit :

➢ Syntaxe

cout << NomChaine;

➢ Exemple

string message = "Bonjour"; // Déclaration et initialisation de la chaine de caractères “message”

cout << ch ; // Affiche la chaine ch → Bonjour

Les chaînes de caractères 7

2) Les chaînes de caractères de style C++

► Manipulation

▪ C ++ prend en charge un ensemble de fonctions qui manipulent des chaînes.

▪ Ces fonctions se trouvent dans le fichier d'en-tête <string>

▪ <string> est utilisée lorsqu’on va manipuler les chaines avec le style C ++

→ il faut ajouter la ligne suivante au début du programme.

#include <string>

→ Le fichier <string> contient également de nombreuses fonctionnalités permettant de simplifier l'utilisation et la manipulation de chaînes.

18
Les chaînes de caractères 8

2) Les chaînes de caractères de style C++

► Manipulation

Affectation directe entre chaînes

▪ En utilisant le style C++, l’affectation directe entre chaînes est permise.

→ il est possible de faire une affectation d’une chaine à une autre en utilisant l’opérateur (=).

➢ Syntaxe : ch1 = ch2; // ch1 est la chaine destination et ch2 est la chaine source

➢ Exemple : string ch1, ch2= "Bonjour";

ch1 = ch2; // Copier la chaîne ch2 dans la chaîne ch1 → ch1=Bonjour

Les chaînes de caractères 9

2) Les chaînes de caractères de style C++

► Manipulation

Concaténation des chaînes

▪ En utilisant le style C++, la concaténation directe des chaînes est possible.

→ La concaténation se fait en copiant la deuxième chaine à la fin de la première en utilisant l’opérateur (+).

➢ Syntaxe : ch1 + ch2 ; // Ajouter la chaine ch2 à la fin de la chaine ch1

➢ Exemple : string ch1="Bonjour ", ch2 ="tout le monde;

cout << ch1+ch2; // le résultat de la concaténation est Bonjour tout le monde .

19
Les chaînes de caractères 10

2) Les chaînes de caractères de style C++

► Manipulation

Longueur d'une chaîne

▪ Cela revient à déterminer le nombre de caractères dans une chaîne.

→ Pour obtenir la longueur d'une chaîne, il est possible d’utiliser l’une des deux fonctions : length() ou size()

➢ Syntaxe : NomChaine. length() ; // déterminer le nombre de caractères dans la chaine en utilisant la fonction length()

NomChaine. size() ; // déterminer le nombre de caractères dans la chaine en utilisant la fonction size()

➢ Exemple : string ch1 ="Bonjour", ch2 ="Salut" ;

ch1.length(); // Retourne la longueur de la chaîne ch1 → 7.

ch2.size(); // Retourne la longueur de la chaîne ch2 → 5.

Les chaînes de caractères 11

2) Les chaînes de caractères de style C++

► Manipulation

Comparaison entre chaînes

▪ En utilisant le style C++, la comparaison directe entre chaînes est possible.

→ Cela revient à effectuer une comparaison avec la simple utilisation des opérateurs habituels (==, !=, >, etc.).

→ La comparaison se fait caractère par caractère entre les chaînes sur la base de l'ordre alphabétique (exemple: "A" < "B").

➢ Syntaxe : ( ch1== ch2 ), (ch1 != ch2), (ch1 > ch2), … // comparaison entre les deux chaines ch1 et ch2

➢ Exemple : string ch1 = "Bonjour", ch2 = "Salut" ;

cout << (ch1==ch2); // Affiche 0 → ch1 et ch2 ne sont pas identiques

cout << (ch1 > ch2); // Affiche (0 ) → 1er caractère de ch1 « B », 1er caractère de ch2 « S » (B vient avant le S dans l’alphabet)

cout << (ch1 < ch2); // Affiche ( 1 ) → 1er caractère de ch1 « B », 1er caractère de ch2 « S » (B vient avant le S dans l’alphabet)

20
Les chaînes de caractères 12

2) Les chaînes de caractères de style C++

► Manipulation

Comparaison entre chaînes

▪ Comment se fait la comparaison ?

▪ La comparaison de deux chaînes caractère se fait en utilisant les codes ASCII des caractères des deux chaines.

Ch1 B o n j o u r Ch2 S a l u t

Code 66 111 110 106 111 117 114 83 97 108 117 116
ASCII

66 < 83

Ch1 est inférieur à Ch2

Les chaînes de caractères 13

2) Les chaînes de caractères de style C++

► Manipulation

Recherche dans une chaîne

▪ La recherche de la première occurrence d’un caractère ou d’une sous chaine dans une chaine se fait à travers la fonction find().

→ Cette fonction admet comme paramètre une chaîne de caractères.

→ Elle retourne la position de la première occurrence du caractère « c » ou de la sous-chaine « s_ch » dans la chaine « chaine »

→ Elle retourne une constante (string::npos) représentant une non-position ➔ ce qu’on cherche ne figure pas dans « chaine »

➢ Syntaxe : ch1.find(ch2) // chercher la première occurrence de la sous chaine « ch2 » dans la chaine « ch1 »

➢ Exemple : string ch1 ="Bonjour", ch2 ="Bon"; char c ='j' ;

ch1.find(ch2) ; // renvoie 0 → la première occurrence de la chaine « ch2 » dans la chaine « ch1 » est dans la position 0

ch1.find(c) ; // renvoie 3 → la première occurrence du caractère « j » dans la chaîne « ch1 » est dans la position 3

21
Les chaînes de caractères 14

2) Les chaînes de caractères de style C++

► Manipulation

Insertion dans une chaîne

▪ L’insertion d’un caractère ou d’une sous chaîne dans une chaîne principale se fait à travers la fonction insert().

→ Cette fonction admet comme paramètres le caractère ou la sous-chaîne à insérer et la position d’insertion.

→ Elle retourne la chaîne « chaîne1 » qui contient le résultat de l’insertion de la « chaîne2 » dans la « chaîne1 »

➢ Syntaxe : ch1.insert(pos, ch2) ; // Insertion de la sous chaine « ch2 » dans la chaine « ch1 » à une position pos

➢ Exemple : string ch1 ="Bon", ch2 ="jour"; int pos =3;

ch1.insert(pos, ch2) ; // Insertion de la chaine « ch2 » dans la chaine « ch1 » à partir de la position 3

Les chaînes de caractères 15

2) Les chaînes de caractères de style C++

► Manipulation

Suppression dans une chaîne

▪ La suppression d’un caractère ou d’une sous chaîne dans une chaîne principale se fait à travers la fonction erase ().

→ Cette fonction admet comme paramètres la position de début de la sous-chaîne à supprimer et sa longueur (nbr de caractères).

→ Elle retourne la chaîne « chaîne1 » qui contient le résultat de la suppression de la « chaîne2 » dans la « chaîne1 ».

➢ Syntaxe : ch1.erase(pos, lg) ; // Suppression de la sous chaine qui débute de la position pos avec une longueur lg dans « ch1 »

➢ Exemple : string ch1 ="Bonjour"; int pos =3, lg=3;

ch1.erase(pos, lg) ; // Retourne Bonr

22
Les chaînes de caractères 16

2) Les chaînes de caractères de style C++

► Manipulation

Conversion d’une chaîne en majuscule/minuscule

▪ Conversion en majuscule

▪ Pour convertir une chaine en majuscule , il faut appeler la bibliothèque algorithm et appliquer la fonction suivante:

➢ Syntaxe : transform (chaine. begin(), chaine. end(), chaine. begin(), ::toupper)

// paramètre 1 chaine. begin() est pour indiquer le début de la chaine

// paramètre 2 chaine. end() est pour indiquer la fin de la chaine

// paramètre 3 chaine. begin() est pour indiquer la position à partir de laquelle la conversion commence

// paramètre 4 ::toupper est la fonction qui permet de faire la conversion en majuscule

➢ Exemple : string ch ="Bonjour";

transform (ch.begin(), ch.end(), ch.begin(), ::toupper) // BONJOUR

Les chaînes de caractères 17

2) Les chaînes de caractères de style C++

► Manipulation

Conversion d’une chaîne en majuscule/minuscule

▪ Conversion en minuscule

▪ Pour convertir une chaine en minuscule , il faut appeler la bibliothèque algorithm et appliquer la fonction suivante :

➢ Syntaxe : transform (chaine. begin(), chaine. end(), chaine. begin(), ::tolower)

// paramètre 1 chaine. begin() est pour indiquer le début de la chaine

// paramètre 2 chaine. end() est pour indiquer la fin de la chaine

// paramètre 3 chaine. begin() est pour indiquer la position à partir de laquelle la conversion commence

// paramètre 4 ::tolower est la fonction qui permet de faire la conversion en minuscule

➢ Exemple : string ch ="BONJOUR";

transform (ch.begin(), ch.end(), ch.begin(), :: tolower) // bonjour

23
Les chaînes de caractères 18

2) Les chaînes de caractères de style C++

► Exercice

Écrire un programme qui permet de supprimer toutes les voyelles d’une chaîne de caractères.

Exemple : Les voyelles = a , e, i, o, u, y Chaine en entrée = « Bonjour lsi»

Chaine en sortie = « Bnjr ls»

Solution 1 :

#include <iostream> for (int i = 0 ; i<ch.size() ; i++){


#include <string> c = toupper(ch[i]);
using namespace std; if (c == 'A' || c == 'E' || c == 'I'|| c == 'O'|| c == 'U' ||c == 'Y' ){
int main(){ ch.erase(i, 1); }
string ch ; char c ; }
cout<<"Entrez une chaine :" ; cout << ch <<endl;
getline ( cin,ch) ; return 0;}

Les chaînes de caractères 19

2) Les chaînes de caractères de style C++

► Exercice

0 1 2 3
i =0 | i<4 (ch.size() ) M O I S

0 1 2 3 0 1 2 0 1 0 1
i =1 | i<4 (ch.size() ) M O I S M I S M S M S

i =1 | i<3 (ch.size() ) i =1 | i<2 (ch.size() ) i =2 | i<2 (ch.size() )


0 1 2
i =2 | i<3 (ch.size() ) M I S
Après chaque suppression et avant de passer au caractère suivant, il
0 1 2 faut tester si le caractère qui a remplacé le caractère supprimé est une
i =3 | i<3 (ch.size() ) M I S
voyelle. (c.a.d le caractère qui a pris la place du caractère supprimé)

Sortie : MIS
→ Le programme ne fonctionne pas correctement × Solution ?
→ Normalement la sortie doit être : MS

24
Les chaînes de caractères 20

2) Les chaînes de caractères de style C++

► Exercice

Écrire un programme qui permet de supprimer toutes les voyelles d’une chaîne de caractères.

Solution 2 :

#include <iostream> while ( i<ch.size() ){


#include <string> c = toupper(ch[i]);
using namespace std; if (c == 'A' || c == 'E' || c == 'I'|| c == 'O'|| c == 'U' ||c == 'Y' ) {
int main(){ ch.erase(i, 1);
string ch ; char c ; }else{
int i =0 ; i++;
cout<<"Entrez une chaine :" ; }
getline ( cin,ch) ; }
cout << ch << endl;
return 0; }

25

Vous aimerez peut-être aussi