« Programmation C++/La librairie standard » : différence entre les versions
Contenu supprimé Contenu ajouté
m JackPotte a déplacé la page Programmation C++ (débutant)/La classe string vers Programmation C++/La librairie standard sans laisser de redirection |
|||
Ligne 1 :
{{C++ débutant}}
== Le cours du chapitre 12 : La classe string ==
__TOC__
=== Présentation de la classe string ===
*Il s'agit d'une classe standard qui permet de représenter une chaîne de caractères.
*Pour l'utiliser, il faut rajouter #include <string>
Ligne 156 ⟶ 9 :
*Ces opérations sont assez complexes notamment la gestion de la mémoire : l'encapsulation permet de masquer à l'utilisateur de la classe toutes les difficultés techniques.
*'''Déclaration et initialisation : '''string s1; string s2= "BONJOUR";
*'''Affichage et saisie : ''' cout<<s2; cin>>s1;
*'''Concaténation : ''' string s3=s2+s1;
'''Fichier main.cpp'''
Ligne 184 ⟶ 37 :
====
*Dans cet exemple, nous étudions l'utilisation de la classe string.
*On peut saisir le contenu d'une chaîne en utilisant cin.
Ligne 191 ⟶ 44 :
*Dans cet exemple, on demande à l'utilisateur de saisir 2 chaînes de caractères s1 et s2 et on affiche s3 la concaténation de s1 et de s2.
Lorsqu'on exécute ce programme, il s'affiche à l'écran : <br/>
Tapez une chaîne : '''AZERTY''' <br/>
Ligne 198 ⟶ 51 :
AZERTYQSDFGH
*Par défaut, lorsqu'on saisit une chaîne de caractères en utilisant cin, le séparateur est l'espace : cela empêche de saisir une chaîne de caractères comportant
*La fonction getline(iostream &,string) permet de saisir une chaîne de caractères en utilisant le passage à la ligne comme séparateur : notre chaîne de caractères peut alors comporter des espaces.
<source lang="cpp" line>
Ligne 223 ⟶ 76 :
*Dans cet exemple, la chaîne de caractères s1 est saisie grâce à l'instruction getline(cin,s1) : cela permet de saisir au clavier la chaîne s1, la fin de la chaîne est alors indiquée lorsqu'on tape sur ENTREE.
*On saisit ensuite la chaîne s2 et on affiche la concaténation des deux chaînes.
Lorsqu'on exécute ce programme, il s'affiche à l'écran :<br/>
Tapez une chaîne : '''AZ ERTY'''<br/>
Ligne 234 ⟶ 87 :
AZ ERTYQS DFGH<br/>
*'''Nombre de caractères d'une chaîne : '''size() est une méthode de la classe string qui renvoie le nombre de caractères utiles.
*'''Récupération du i-ième caractère : '''la méthode const char at(int i) permet de récupérer le i+1ième caractère. (0 = 1er)
<source lang="cpp" line>
Ligne 249 ⟶ 102 :
{
string s= "BONJOUR";
int i, taille = s.size ();
cout << "La chaine comporte " << taille << " caracteres." << endl;
for (
cout << "caractère " << i << " = " << s.at(i) << endl;
return 0;
Ligne 260 ⟶ 113 :
*La méthode size() sur un string permet de connaître la taille d'une chaîne de caractères.
*Si i est un entier s.at(i) permet de connaître le (i+1)-ième caractère de la chaîne (s.at(0) étant le premier caractère).
*Dans ce programme, on initialise la chaîne s à "BONJOUR" : on affiche ensuite la taille de la chaîne et on affiche ensuite un à un chaque caractère.
Lorsqu'on exécute ce programme, il s'affiche à l'écran :
La chaîne comporte 7 caractères
Ligne 276 ⟶ 129 :
caractère 6 = R
*'''Transformation de chaîne de type C en string :''' on peut utiliser le constructeur string(char *) ou l'affectation grâce au symbole = d'un char * vers une string.
*'''Transformation d'une string en chaîne de type C : ''' il suffit d'utiliser la méthode : c_str() qui renvoie un char * qui est une chaîne de type C.
<source lang="cpp" line>
Ligne 303 ⟶ 156 :
*Dans cet exemple, c1 est un tableau de 8 char contenant la chaîne "BONJOUR " (n'oubliez pas le caractère de fin de chaîne '\0').
*Le pointeur c2 est un pointeur vers un tableau non modifiable de char.
Ligne 311 ⟶ 164 :
*On peut transformer aisément une string en tableau de char et inversement.
Lorsqu'on exécute ce programme, il s'affiche à l'écran : <br/>
BONJOUR<br/>
AU REVOIR<br/>
*Pour transformer une chaîne en double ou en int, il faut transformer la chaîne en flot de sortie caractères : il s'agit d'un istringstream.
*Ensuite, nous pourrons lire ce flot de caractères en utilisant les opérateurs usuels >>.
Ligne 322 ⟶ 175 :
*Chaque lecture sur ce flot grâce à l'opérateur >> renvoie un booléen qui nous indique d'éventuelles erreurs.
<source lang="cpp" line>
Ligne 343 ⟶ 196 :
*Dans cet exemple, s est une chaîne : on saisit une chaîne au clavier en utilisant getline(cin,s).
*On crée ensuite un istringstream appelé istr et construit à partir de s.
Ligne 350 ⟶ 203 :
*De la même manière, on pourrait lire des données d'autres types, double par exemple.
Lorsqu'on exécute ce programme, il s'affiche à l'écran : <br/>
Tapez une chaîne : '''12345''' <br/>
VOUS AVEZ TAPE L'ENTIER 12345
Lorsqu'on exécute ce programme, il s'affiche à l'écran : <br/>
Tapez une chaîne : '''BJ9UYU'''<br/>
VALEUR INCORRECTE <br/>
== EXERCICES ==
=== EXERCICE 1 ===
On veut écrire une classe Note qui est représentée par 3 données membres : 2 chaînes de caractères nom et prénom et un entier v qui est la valeur de la note. Grâce au constructeur par défaut la note est initialisée ainsi : le nom et le prénom sont à la chaîne vide et la valeur note vaut 0. <br/>
Pour pouvoir accéder à la valeur du nom, prénom et de la note il y a un accesseur. Un unique mutateur permet de modifier le nom, le prénom et la valeur de la note mais il doit respecter les contraintes suivantes : <br/>
Le nom et le prénom ne peuvent pas être la chaîne vide. <br/>
La note est comprise entre 0 et 20 bornes incluses <br/>
Le mutateur renvoie un booléen true si tout s'est bien passé false sinon.<br/>
On peut afficher la note grâce à l'opérateur << et en saisir une grâce à l'opérateur >>.
On écrira une classe menu qui gérer notre une note de la manière suivante :<br/>
1. Afficher la note<br/>
2. Modifier la note<br/>
0. Quitter<br/>
Écrire le programme principal qui crée notre note et qui appelle notre menu.<br/>
|