Maison > Article > développement back-end > A quoi sert la fonction strtok ?
Utilisation de la fonction strtok : 1. Agit sur la chaîne s, en utilisant les caractères delim comme délimiteurs pour diviser s en une sous-chaîne ; 2. Si s est NULL, le pointeur enregistré par la fonction [SAVE_PTR] être utilisée comme position de départ lors du prochain appel.
Recommandations gratuites associées : Cours vidéo de programmation
Utilisation de la fonction strtok :
1 Introduction à la fonction
Prototype de fonction : char *strtok(char *s. , char *delim)
Fonction : Agit sur la chaîne s, en utilisant les caractères de delim comme délimiteurs pour diviser s en une sous-chaîne ; si s est une valeur nulle NULL, le pointeur SAVE_PTR enregistré par la fonction est comme suit Sera utilisé comme position de départ dans un appel.
Valeur de retour : la première sous-chaîne correspondant au délimiteur
2. Contenu principal
1 La fonction est Décomposer. une chaîne. La soi-disant décomposition signifie qu'aucune nouvelle chaîne n'est générée, mais que le délimiteur est remplacé par '/0' à la position où le délimiteur apparaît pour la première fois dans le contenu pointé par s. Par conséquent, strtok() est utilisé pour. la première fois pour renvoyer la première sous-chaîne
2. Après la première extraction de la sous-chaîne, continuez à extraire la chaîne source s, qui doit être suivie (la deuxième fois, la troisième fois. . Lors du nième appel, attribuez le premier paramètre de strtok à la valeur nulle NULL ( signifie que la fonction continue de décomposer la chaîne à partir de la position implicitement enregistrée dans l'appel précédent ; pour l'appel précédent, avant la fin du premier appel, utilisez un pointeur this pour pointer vers le bit suivant du délimiteur )
3. Lorsque ce pointeur pointe vers " Le résultat du premier appel est comme mentionné ci-dessus, et ",Fred" est extrait. Nous souhaitons également continuer à utiliser les espaces comme limites pour extraire le « mâle » suivant, etc. Comme le montre la figure ci-dessus, pour le premier appel après le premier appel, nous avons passé la valeur nulle NULL au premier paramètre de strtok ( signifie que la fonction continue de décomposer la chaîne à partir de la position implicitement enregistrée dans le appel précédent ; pour Pour le deuxième appel ci-dessus, avant la fin du premier appel, un pointeur this est utilisé pour pointer vers le bit suivant du délimiteur, c'est-à-dire la position de 'm' ), de sorte que , . . . . Et ainsi de suite. . . . . Lorsqu'une sous-chaîne est extraite, la valeur de retour de strtok (en supposant que le la valeur de retour est affectée au pointeur buf) est le pointeur vers la sous-chaîne extraite. Ce pointeur pointe vers la position de départ de la sous-chaîne dans la chaîne source. Le caractère suivant à la fin de la sous-chaîne est le délimiteur avant l'extraction, mais est modifié en « /0 » après l'extraction. Par conséquent, si la valeur de buf est imprimée, le contenu de la sous-chaîne peut être généré avec succès. Quelle valeur la fonction retournera-t-elle si aucune sous-chaîne n'est extraite ? Quand la valeur de retour d'une fonction est-elle NULL ? renvoie NULL lorsqu'il n'y a pas de chaîne divisée. " Il s'agit d'une déclaration très ambiguë. Si vous voulez comprendre clairement ce problème, vous devrez peut-être jeter un œil au principe de mise en œuvre de strtok. Voici d’abord une explication expérimentale. Le résultat après le premier appel s'est avéré être "Fred", pas celui auquel nous nous attendions. Pourquoi ça ? Nous revenons à la définition de la fonction strtok dans la bibliothèque GNU C : "Analyser S en jetons séparés par des caractères dans DELIM". C'est-à-dire que les caractères inclus dans delim peuvent être utilisés comme séparateurs au lieu d'une correspondance stricte. Delim peut être compris comme un ensemble de délimiteurs. Ce point est très important~ Bien sûr, lorsque nous décomposons une chaîne, nous utilisons rarement plusieurs délimiteurs. Cela conduit également de nombreuses personnes à ne discuter que du cas d'un seul séparateur lors de la rédaction d'exemples. De plus en plus de gens comprennent mal le rôle du délim lorsqu’ils regardent des exemples. Ce n'est pas un cas particulier que le premier caractère soit le délimiteur. Les chaînes peuvent également être décomposées correctement selon les idées de décomposition conventionnelles. Ce que je tiens à souligner, c'est que strtok adopte une méthode de traitement plus rapide que la normale pour cette situation. Comme le montre l'exemple ci-dessus. La chaîne "Fred male 25" séparée par des virgules peut être obtenue avec un seul appel, et le ',' devant le F est ignoré. On peut voir que strtok ignore le délimiteur à partir de la position de départ lorsqu'il est appelé. Cela peut être confirmé à partir du code source de strtok. Les exemples de cet article enregistrent tous la chaîne source en tant que variable de tableau de chaînes. Si vous définissez la chaîne source comme constante de chaîne, vous pouvez imaginer que le programme lèvera une exception car la fonction strtok tente de modifier la valeur de la chaîne source. 5. Le premier caractère de la chaîne à décomposer est le délimiteur
6. Vous ne pouvez pas passer une constante de chaîne au premier paramètre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!