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.
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>
| Fonction | Signature | Description |
|---|---|---|
strcpy | char* strcpy(char* dest, const char* src) | Copie src dans dest (inclut le '\0') |
strcat | char* strcat(char* dest, const char* src) | Concatène src à la fin de dest |
strlen | size_t strlen(const char* str) | Renvoie la longueur (sans le '\0') |
strcmp | int strcmp(const char* s1, const char* s2) | Compare lexicographiquement : <0, 0, ou >0 |
strchr | char* strchr(char* str, int ch) | Cherche la 1ère occurrence du caractère ch |
strstr | char* 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;
}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)str1 et str2 : -1 str2 et str3 : 1 str3 et str4 : 0
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
| Fonction | Description |
|---|---|
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é
| Fonction | Description |
|---|---|
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
| Fonction | Description |
|---|---|
str1 + str2 | Concaté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;
}Première occurrence de "city" : 12 Première occurrence de 'i' : 5 Dernière occurrence de 'i' : 46 Dernière occurrence de "city" : 45
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.