Maison  >  Article  >  développement back-end  >  A quoi sert la fonction strtok ?

A quoi sert la fonction strtok ?

coldplay.xixi
coldplay.xixioriginal
2020-10-28 09:48:2716584parcourir

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.

A quoi sert la fonction strtok ?

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

, A quoi sert la fonction strtok ?. . . . Et ainsi de suite. . . . . A quoi sert la fonction strtok ?

Quant à la raison pour laquelle vous devez attribuer une valeur nulle, vous pouvez soit vous souvenir de la conclusion, soit vérifier le code source de strtok. Il y aura une introduction à la fin de cet article.

Bien sûr, il y a aussi des gens qui aiment avoir des ennuis et doivent jouer leurs cartes selon la routine. Ils veulent voir quelles seront les conséquences s'ils continuent à attribuer la valeur au tampon. sans attribuer de valeur nulle. En fait, la réponse peut être imaginée. Passer à nouveau le tampon équivaut à rechercher le délimiteur depuis le début de la chaîne, et le tampon a été modifié à ce moment (seul ",Fred" est laissé dans la partie visible. Par conséquent, le résultat doit être que le). le délimiteur délim est introuvable.

3. Discussion sur la valeur de retour de la fonction

Comme mentionné dans "1",

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 ?

A quoi sert la fonction strtok ?

Comme vous pouvez le voir sur la figure ci-dessus, le tampon ne contient pas le délimiteur delim. Après avoir appelé strtok, la valeur de buf est

A quoi sert la fonction strtok ?

Parce qu'elle n'est pas trouvée, le tampon de la chaîne source n'a pas changé, buf pointe vers la première adresse de la chaîne source, et. la valeur de sortie imprimée est le caractère entier. La valeur complète de la chaîne.

Quand la valeur de retour d'une fonction est-elle NULL ?

L'Encyclopédie Baidu dit : "

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.

A quoi sert la fonction strtok ?

La première fois que strtok est appelé, il ne fait aucun doute que buf pointe vers ",Fred".

Appelez strtok pour la deuxième fois. Puisque le premier paramètre est NULL, cela signifie que la fonction continue de se décomposer à partir de la position de ce pointeur enregistrée lors du dernier appel, c'est-à-dire décomposer "male 25". Une fois la décomposition terminée, buf pointe vers "mâle".

La troisième fois que strtok est appelé, le paramètre continue d'être défini sur NULL. À ce moment, la position du pointeur this enregistrée pour la deuxième fois commence à être décomposée, c'est-à-dire que "25" est décomposé. . Étant donné que la sous-chaîne contenant le délimiteur délimiteur est introuvable, buf pointe vers "25".

A quoi sert la fonction strtok ?

Au quatrième appel, le paramètre est toujours NULL A ce moment, le pointeur this enregistré dans le troisième appel a pointé vers la fin de la chaîne '/0', et cela ne peut plus être fait. Par conséquent, la fonction renvoie NULL, ce qui est mentionné dans l'Encyclopédie Baidu : "La fonction renvoie NULL lorsqu'il n'y a pas de chaîne divisée."

A quoi sert la fonction strtok ?

. 4 .Discussion sur le paramètre délimiteur delim (delim est un ensemble de délimiteurs)

Lorsque de nombreuses personnes utilisent strtok, elles tiennent pour acquis que la fonction correspond complètement au délimiteur delim lors du fractionnement d'une chaîne, comme delim= "ab", puis pour la chaîne "acdab", la fonction extrait "acd". Du moins, c'est ce que je pensais lorsque je l'ai utilisé pour la première fois. En fait, nous avions tous tort. Je n'ai découvert ce problème qu'en regardant le code source de la fonction. Regardons l'exemple suivant.

A quoi sert la fonction strtok ?

La chaîne source est buffer, et le délimiteur est une virgule et un espace. Selon l'idée générale, on pourrait penser qu'après avoir appelé la fonction, la valeur de buf est. "Fred,homme,25 ans", est-ce le résultat ?

A quoi sert la fonction strtok ?

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.

5. Le premier caractère de la chaîne à décomposer est le délimiteur

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.

A quoi sert la fonction strtok ?

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.

6. Vous ne pouvez pas passer une constante de chaîne au premier paramètre !

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.

A quoi sert la fonction strtok ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn