STRSTR |
Chaîne dans la chaîne |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
char *strstr(const char *source,const char *search); | Syntaxe standard |
char *strstr(char *source, const char *search); | Certains C++ seulement |
const char *strstr(const char *source, const char *search); | Certains C++ seulement |
Paramètres
Nom | Description |
---|---|
source | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant la source. |
search | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ à rechercher. |
Description
Cette fonction de recherche la chaîne de caractères «search» dans la chaîne de caractères «source».
Remarques
- La fonction strstr() renvoie un pointeur sur la première occurrence de la chaîne de caractères pointée par le paramètre source de la chaîne de caractères pointée par le paramètre search. Il renvoie un pointeur null si aucune correspondance n'est trouvée.
- Retourne un pointeur vers la sous-chaîne trouvée : Contrairement à std::string::find, retournant un indice, strstr retourne un pointeur vers le début de l'occurrence trouvée. Exemple :
- Si la sous-chaîne est vide (""), elle retourne le pointeur original : Si needle est une chaîne de caractères vide (""), strstr retourne un pointeur vers le début de haystack, ce qui peut être utile pour certains traitements. Exemple :
- Recherche sensible à la casse : strstr fait une recherche sensible à la casse, donc "Hello" et "hello" ne seront pas considérés comme équivalents. Exemple :
- Peut être utilisé pour vérifier la présence d'une sous-chaîne de caractères : strstr est souvent utilisé pour vérifier si une sous-chaîne existe dans une autre, sans nécessiter de manipulations complexes. Exemple :
- Attention aux pointeurs nullptr : Si haystack ou needle est nullptr, l'appel à strstr entraînera un comportement indéfini. Il est donc essentiel de toujours vérifier les pointeurs avant d'appeler la fonction :
- Alternative moderne avec std::string::find : En C++ moderne, std::string::find est plus sûr et plus intuitif que strstr, car il retourne un indice plutôt qu'un pointeur. Exemple :
- std::string str = "Bonjour le monde";
- size_t pos = str.find("monde");
- if (pos != std::string::npos) {
- std::cout << "Trouvé à l'index : " << pos; // Affiche 11
- }
- Implémentation et complexité : strstr utilise généralement une recherche naïve (O(n*m)) pour trouver needle dans haystack, ce qui peut être inefficace pour de grandes chaînes de caractères. Certaines implémentations optimisées utilisent des algorithmes plus avancés comme Knuth-Morris-Pratt (KMP) ou Boyer-Moore pour améliorer les performances.
Pour une recherche insensible à la casse, il faut utiliser strcasestr (non standard) ou std::search avec std::tolower.
Exemple
Voici un exemple montrant comme afficher le contenu de la chaine de caractères à partir de «Gladir.com» inclusivement :

on obtiendra le résultat suivant :
Gladir.com contenu dedans !Voir également
Langage de programmation - C - Référence procédures et fonctions - strstr
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 266.
Dernière mise à jour : Lundi, le 3 août 2015