STRTOK |
Chaine avec séparateur |
---|---|
Langage C | 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 chaine de caractères «str2».
Algorithme
MODULE STRTOK(str, delim) SI str est NULL et last_token n'est pas NULL ALORS Utiliser last_token pour reprendre le découpage précédent FIN SI SI str est non NULL ALORS Mémoriser str dans last_token FIN SI Chercher la première occurrence de délimiteur dans last_token SI trouvé ALORS Remplacer ce délimiteur par un caractère nul '\0' FIN SI SI un token (partie non vide) a été trouvé ALORS RETOURNE un pointeur vers ce token FIN SI SINON RETOURNE NULL FIN SI |
Remarques
- Modifie la chaîne de caractères d'entrée : Une particularité importante de strtok est qu'elle modifie la chaîne de caractères d'entrée en la coupant aux endroits des délimiteurs. Elle remplace chaque délimiteur trouvé par un caractère nul (\0) pour marquer la fin de chaque token. Cela signifie que la chaîne de caractères originale est modifiée, ce qui peut être problématique si vous avez besoin de la conserver intacte.
- Retour des token : La fonction retourne un pointeur vers le premier caractère de chaque token extrait. Si aucun token n'est trouvé ou si la fin de la chaîne de caractères est atteinte, strtok retourne NULL. Les appels successifs à strtok permettront de récupérer tous les token de la chaîne de caractères. Chaque appel extrait un token, puis l'appelle suivant reprend là où le précédent s'est arrêté.
- Délimiteurs multiples : Le paramètre delim de strtok est une chaîne de caractères contenant plusieurs caractères délimiteurs. Tous les caractères présents dans cette chaîne de caractères sont considérés comme des délimiteurs. Par exemple, si delim est ",; ", la fonction séparera la chaîne de caractères chaque fois qu'elle rencontrera une virgule, un point-virgule ou un espace.
- Détail sur l'utilisation de NULL pour la chaîne de caractères : Lors du découpage successif d'une chaîne de caractères, après le premier appel à strtok, il est nécessaire de passer NULL comme premier paramètre dans les appels suivants. Cela permet à strtok de se souvenir de l'emplacement où il s'est arrêté précédemment dans la chaîne de caractères et de reprendre à partir de ce point pour extraire le token suivant.
- Sécurité et limitations : strtok n'est pas sûre dans un contexte multi-processus léger, car elle utilise une variable statique interne pour mémoriser l'état entre les appels. Cela peut entraîner des problèmes si plusieurs processus légers appellent strtok simultanément. Pour un environnement multi-processus léger, la fonction strtok_r (étant réentrante) devrait être préférée.
- Comportement avec des chaînes vides ou des délimiteurs consécutifs : Si la chaîne de caractères est vide ou si elle contient des délimiteurs consécutifs, strtok renverra NULL après avoir traité ces cas. Par exemple, si la chaîne de caractères est "a;;b", strtok renverra "a" lors du premier appel, puis "b" lors du suivant. Cependant, les délimiteurs vides ou consécutifs seront ignorés et ne généreront pas de tokens vides.
- Utilisation dans le traitement de données structurées : strtok est couramment utilisée dans le traitement de fichiers texte structurés, comme les fichiers CSV, les journaux de bords ou les entrées utilisateur, où les données sont séparées par des caractères spécifiques. Elle permet de parser rapidement des données en les découpant en segments de manière itérative, ce qui est particulièrement utile pour les opérations d'analyse de texte dans les applications simples.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
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 : Mardi, le 28 juillet 2015