std:: strtok
|
Défini dans l'en-tête
<cstring>
|
||
|
char
*
strtok
(
char
*
str,
const
char
*
delim
)
;
|
||
Tokenise une chaîne d'octets terminée par un caractère nul.
Une séquence d'appels à
std::strtok
décompose la chaîne pointée par
str
en une séquence de tokens, chacun étant délimité par un caractère de la chaîne pointée par
delim
. Chaque appel dans la séquence possède une
cible de recherche
:
- Si str n'est pas nul, l'appel est le premier appel de la séquence. La cible de recherche est la chaîne d'octets terminée par un nul pointée par str .
- Si str est nul, l'appel est l'un des appels suivants de la séquence. La cible de recherche est déterminée par l'appel précédent dans la séquence.
Chaque appel dans la séquence recherche dans la cible de recherche le premier caractère qui n'est pas contenu dans la chaîne de séparation pointée par delim , la chaîne de séparation peut varier d'un appel à l'autre.
- Si aucun tel caractère n'est trouvé, alors il n'y a aucun jeton dans la cible de recherche. La cible de recherche pour l'appel suivant dans la séquence reste inchangée. [1]
-
Si un tel caractère est trouvé, il constitue le début du jeton actuel.
std::strtokrecherche ensuite à partir de là le premier caractère contenu dans la chaîne de séparateurs.- Si aucun tel caractère n'est trouvé, le jeton actuel s'étend jusqu'à la fin de la cible de recherche. La cible de recherche pour l'appel suivant dans la séquence est une chaîne vide. [2]
- Si un tel caractère est trouvé, il est remplacé par un caractère nul, ce qui termine le jeton actuel. La cible de recherche pour l'appel suivant dans la séquence commence au caractère suivant.
Si str ou delim n'est pas un pointeur vers une chaîne d'octets terminée par un caractère nul, le comportement est indéfini.
- ↑ Un jeton peut encore être formé lors d'un appel ultérieur avec une chaîne de séparation différente.
- ↑ Aucun autre jeton ne peut être formé lors des appels ultérieurs.
Table des matières |
Paramètres
| str | - | pointeur vers la chaîne d'octets terminée par un caractère nul à tokeniser |
| delim | - | pointeur vers la chaîne d'octets terminée par un caractère nul identifiant les délimiteurs |
Valeur de retour
Retourne un pointeur vers le premier caractère du jeton suivant, ou un pointeur nul s'il n'y a pas de jeton.
Notes
Cette fonction est destructive : elle écrit les caractères
'
\0
'
dans les éléments de la chaîne
str
. En particulier, un
littéral de chaîne
ne peut pas être utilisé comme premier argument de
std::strtok
.
Chaque appel à cette fonction modifie une variable statique : n'est pas thread-safe.
Contrairement à la plupart des autres tokenizers, les délimiteurs dans
std::strtok
peuvent être différents pour chaque token subséquent, et peuvent même dépendre du contenu des tokens précédents.
Implémentation possible
char* strtok(char* str, const char* delim) { static char* buffer; if (str != nullptr) buffer = str; buffer += std::strspn(buffer, delim); if (*buffer == '\0') return nullptr; char* const tokenBegin = buffer; buffer += std::strcspn(buffer, delim); if (*buffer != '\0') *buffer++ = '\0'; return tokenBegin; } |
Les implémentations réelles de cette fonction dans les bibliothèques C++ délèguent à la bibliothèque C, où elle peut être implémentée directement (comme dans MUSL libc ), ou via sa version réentrante (comme dans GNU libc ).
Exemple
#include <cstring> #include <iomanip> #include <iostream> int main() { char input[] = "one + two * (three - four)!"; const char* delimiters = "! +- (*)"; char* token = std::strtok(input, delimiters); while (token) { std::cout << std::quoted(token) << ' '; token = std::strtok(nullptr, delimiters); } std::cout << "\nContents of the input string now:\n\""; for (std::size_t n = 0; n < sizeof input; ++n) { if (const char c = input[n]; c != '\0') std::cout << c; else std::cout << "\\0"; } std::cout << "\"\n"; }
Sortie :
"one" "two" "three" "four" Contents of the input string now: "one\0+ two\0* (three\0- four\0!\0"
Voir aussi
|
trouve la première occurrence de n'importe quel caractère d'un ensemble de séparateurs
(fonction) |
|
|
retourne la longueur du segment initial maximal qui consiste
uniquement en des caractères non trouvés dans une autre chaîne d'octets (fonction) |
|
|
retourne la longueur du segment initial maximal qui consiste
uniquement en des caractères trouvés dans une autre chaîne d'octets (fonction) |
|
|
(C++20)
|
une
view
sur les sous-intervalles obtenus en divisant une autre
view
en utilisant un délimiteur
(modèle de classe) (objet adaptateur de plage) |
|
Documentation C
pour
strtok
|
|