Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Langage C++
  3. Chaînes de caractères, la classe string
Extrait - Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition)
Extraits du livre
Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition) Revenir à la page d'achat du livre

Chaînes de caractères, la classe string

Hérité du C

À l’origine, une chaîne de caractères (string en anglais) est une suite de caractères stockée dans un tableau de char et terminée par le caractère \0.

Le \0 marque la fin de la chaîne quelle que soit la taille du tableau, mais le nombre total de caractères dans la chaîne ne peut pas dépasser la taille du tableau. 

Toutes les fonctions de traitement de chaînes de caractères s’appuient sur le \0 final pour trouver la fin de la chaîne et jamais sur la taille du tableau.

Un tableau de char peut être initialisé à la déclaration avec une chaîne de caractères, soit par exemple la séquence :

char s[]{ "bonjour\n" }; 
std::cout<<s;    // imprime bonjour 
s[3]='s'; 
s[5]='i'; 
std::cout<<s; // imprime bonsoir 

La chaîne s possède 9 caractères, le \0 final est implicite. Le reste du tableau n’est pas utilisé.

Toute seule, la chaîne bonjour\n est une constante chaîne de caractères (telle quelle, elle n’est pas modifiable). Un \0 est ajouté par la machine à toutes les constantes chaînes de caractères. C’est pourquoi cette chaîne a 9 caractères au total : 7 lettres, un retour chariot et le \0 final. Le tableau s est initialisé avec cette chaîne de 9 caractères, mais c’est le seul cas où l’utilisation de l’opérateur d’affectation est utilisable en C pour une copie de chaîne de caractères. Sinon, pour copier deux chaînes de caractères en C, il faut utiliser une fonction standard comme strcpy_s().

En cas d’oubli du \0 final le résultat est incertain, le programme plante ou bien...

Apports du C++ : la classe string

La classe string appartient aux "presque conteneurs" selon l’expression de Bjarne Stroustrup. Nous ne présentons là que le strict minimum qui permet d’utiliser très basiquement des strings afin d’obtenir du texte dans la console. Une excellente documentation est fournie sur https://cplusplus.com/reference/string/ et également sur https://en.cppreference.com/w/cpp/string.

La classe string permet d’obtenir des objets qui sont des chaînes de caractères. Elle se trouve dans le namespace std. Le type string s’obtient avec :

std::string // sans using namespace std; 
string      // avec 

L’utilisation avec cout nécessite l’inclusion explicite de <string>. Voici un exemple :

#include <iostream>    // pour cout, endl, cin 
#include <string>      // pour utilisation de string avec cout 
 
int main() 
{ 
    std::string s = "Bonjour";    // affectation d'une constante char* 
    std::cout << s << std::endl;  // affichage 
    std::cin.get(); 
    return 0; 
} 

Le même exemple avec utilisation d’un using pour std :

#include <iostream> 
#include <string> 
using namespace std; 
 
int main() 
{ 
    string s = "Bonjour"; 
    cout << s << endl; 
    cin.get(); 
    return 0; 
} 

Dans la suite, nous utilisons surtout l’affectation qui est interdite aux tableaux de char, mais permise aux strings grâce à la surcharge...