Classe std::string et les chaînes de caractères en C++

15 Aug 2021 15 Aug 2021 12257 vues ESSADDOUKI Mostafa 4 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

Les chaînes de caractères sont omniprésentes en programmation. C++ propose deux représentations : les chaînes style C (tableaux de char terminés par '\0') et la classe std::string, plus puissante et sûre.

Chaîne de caractères style C

Une chaîne style C est un tableau de char se terminant par le caractère nul '\0'. Elle est manipulée via les fonctions de <cstring>.

Fonctions du style C — <cstring>

FonctionSignatureDescription
strcpychar* strcpy(char* dest, const char* src)Copie src dans dest (inclut le '\0')
strcatchar* strcat(char* dest, const char* src)Concatène src à la fin de dest
strlensize_t strlen(const char* str)Renvoie la longueur (sans le '\0')
strcmpint strcmp(const char* s1, const char* s2)Compare lexicographiquement : <0, 0, ou >0
strchrchar* strchr(char* str, int ch)Cherche la 1ère occurrence du caractère ch
strstrchar* strstr(char* str, const char* cible)Cherche la 1ère occurrence de la sous-chaîne cible

  Exemple — strcpy

#include <cstring>
#include <iostream>
using namespace std;

int main() {
    char src[] = "Hello from Morocco.";
    char dest[20];
    strcpy(dest, src);
    cout << dest;
    return 0;
}
Sortie
Hello from Morocco.

  Exemple — strcmp

char str1[] = "We love France";
char str2[] = "We love Morocco";
char str3[] = "we love morocco";
char str4[] = "we love morocco";

cout << strcmp(str1, str2) << endl; // négatif (F < M)
cout << strcmp(str3, str2) << endl; // positif (minuscule > majuscule)
cout << strcmp(str3, str4) << endl; // 0 (égales)
Sortie
str1 et str2 : -1
str2 et str3 : 1
str3 et str4 : 0
Danger avec strcpy et strcat

Ces fonctions ne vérifient pas la taille du tableau destination. Un tableau trop petit provoque un dépassement de tampon (buffer overflow), source de bugs et de failles de sécurité. Préférez std::string en C++.

La classe std::string

La classe std::string (en-tête <string>) gère automatiquement la mémoire et offre une API riche.

Fonctions d'entrée

FonctionDescription
getline(cin, str)Lit une ligne entière (espaces inclus)
push_back(c)Ajoute le caractère c en fin de chaîne
pop_back()Supprime le dernier caractère

Fonctions de capacité

FonctionDescription
length() / size()Nombre de caractères
capacity()Mémoire allouée (peut être > longueur)
resize(n)Redimensionne la chaîne à n caractères
shrink_to_fit()Réduit la capacité au minimum nécessaire

Fonctions de manipulation

FonctionDescription
str1 + str2Concaténation avec l'opérateur +
compare(str2)Comparaison : 0 si égales, négatif ou positif sinon
find(s)Position de la 1ère occurrence de s
rfind(s)Position de la dernière occurrence de s
find_first_of(s)Position du 1er caractère parmi ceux de s
find_last_of(s)Position du dernier caractère parmi ceux de s
insert(pos, s)Insère la sous-chaîne s à la position pos
clear()Vide la chaîne (longueur → 0)
empty()Renvoie true si la chaîne est vide

  Exemple n°4 — Recherche dans une chaîne

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str = "Meknes is a city in morocco, Rabat is also a city";

    cout << "Première occurrence de \"city\" : " << str.find("city") << endl;
    cout << "Première occurrence de 'i'    : " << str.find_first_of("is") << endl;
    cout << "Dernière occurrence de 'i'    : " << str.find_last_of("is") << endl;
    cout << "Dernière occurrence de \"city\" : " << str.rfind("city") << endl;
    return 0;
}
Sortie
Première occurrence de "city" : 12
Première occurrence de 'i'    : 5
Dernière occurrence de 'i'    : 46
Dernière occurrence de "city" : 45
std::string vs char[]

Préférez toujours std::string en C++ moderne : pas de risque de dépassement de tampon, gestion automatique de la mémoire, et une API riche et expressive.

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.