STRTOK |
Chaine avec séparateur |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
char *strtok(const char *str1,const char *str2) |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant la source. |
str2 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant le séparateur. |
Description
Cette fonction permet de couper la chaîne de caractères «str1» en symbole élémentaire (Token) en les séparant par les caractères de la chaîne de caractères «str2».
Remarques
- La fonction strtok() renvoie un pointeur sur le jeton (symbole élémentaires) suivant dans la chaîne de caractères pointée par le paramètre str1. Les caractères composant la chaîne de caractères pointée par str2 sont les délimiteurs déterminant le jeton (symbole élémentaires). Un pointeur null est renvoyé lorsqu'il n'y a pas de jeton (symbole élémentaires) à retourner.
- Pour un jeton (symbole élémentaires) de chaîne de caractères, le premier appel à strtok() doit avoir le paramètre str1 pointant vers la chaîne de caractères en cours de jeton (symbole élémentaires). Les appels suivants doivent utiliser un pointeur null pour le paramètre str1. De cette façon, la chaîne de caractères entière peut être réduite à ses jetons.
- Il est possible d'utiliser un ensemble différent de délimiteurs pour chaque appel à la fonction strtok().
- Utilisation des délimiteurs : Les délimiteurs sont une chaîne de caractères définissant les caractères sur lesquels la division doit se faire. Par exemple, des espaces, des virgules ou des tabulations peuvent être utilisés comme délimiteurs. Exemple :
- Rappel de l'état interne : La première fois que strtok est appelée, elle prend la chaîne à analyser comme premier paramètre. Pour les appels suivants, il est nécessaire de passer nullptr comme premier argument pour continuer à analyser la même chaîne de caractères. Cela signifie que strtok maintient un état interne pour suivre où elle s'est arrêtée, ce qui peut être une source de confusion si elle est utilisée de manière non intentionnelle dans des contextes multi-processus légers.
- Modification de la chaîne de caractères d'origine : strtok modifie la chaîne de caractères d'origine en insérant des caractères null (\0) à la place des délimiteurs, ce qui signifie qu'il n'est pas sûr d'utiliser strtok sur des chaînes littérales (constantes). Pour éviter des comportements indésirables, il est recommandé de travailler sur une copie de la chaîne de caractères ou de s'assurer que la chaîne passée à strtok est modifiable. Exemple :
- Limites et comportement avec des délimiteurs consécutifs : Si plusieurs délimiteurs sont consécutifs, strtok les considère comme un seul délimiteur et renvoie un jeton vide entre eux. Cela peut entraîner une ambiguïté si l'on ne s'y attend pas. Exemple :
- Renvoie nullptr à la fin de l'analyse : Lorsque tous les jetons ont été extraits, strtok renvoie nullptr. Cela permet aux utilisateurs de détecter facilement la fin de l'analyse. Il est essentiel de vérifier la valeur de retour à chaque itération pour éviter d'accéder à des pointeurs invalides. Exemple :
- Pas de support pour les chaînes de caractères vides : Si la chaîne de caractères d'entrée est vide ou si elle ne contient que des délimiteurs, strtok renverra immédiatement nullptr. Cela signifie qu'il n'y aura pas de jetons extraits dans de tels cas. Exemple :
- Alternatives modernes : En C++, il existe des alternatives plus modernes et sécurisées pour des jetons des chaînes de caractères, telles que std::istringstream de la bibliothèque <sstream>, offrant une approche orientée objet et évite certains des inconvénients de strtok, comme la modification des chaînes de caractères d'origine. Exemple avec std::istringstream :
- #include <sstream>
- #include <string>
- std::string str = "Bonjour, Monde!";
- std::istringstream ss(str);
- std::string token;
- while (std::getline(ss, token, ' ')) {
- std::cout << token << std::endl; // Affiche les jetons
- }
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

on obtiendra le résultat suivant :
message1=Voicimessage2=usr
Voir également
Langage de programmation - C - Référence procédures et fonctions - strtok
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 268.
Dernière mise à jour : Lundi, le 3 août 2015