C - Détermination du délimiteur utilisé - strtok ()
Disons que je suis en utilisant strtok()
comme ça..
char *token = strtok(input, ";-/");
Est-il un moyen de comprendre le jeton est utilisé? Par exemple, si les entrées était quelque chose comme:
Bonjour; Comment allez-vous? /Je suis de bonne Fin
Puis-je comprendre ce qui délimiteur utilisé pour chaque jeton? J'ai besoin d'être en mesure d'afficher un message spécifique, selon le délimiteur qui a suivi le jeton.
source d'informationauteur Andrew Backes
Vous devez vous connecter pour publier un commentaire.
Important:
strtok
n'est pas ré-entrant, vous devez utiliserstrtok_r
au lieu de.Vous pouvez le faire en enregistrant une copie de la chaîne d'origine, et en le regardant dans les décalages de l'actuel jeton dans cette copie:
Ce imprime
Demo #1
EDIT: de traitement de plusieurs délimiteurs
Si vous devez gérer plusieurs séparateurs, la détermination de la longueur de la séquence en cours de délimiteurs devient un peu plus difficile: vous devez maintenant trouver le prochain jeton avant de décider quelle est la durée de la séquence de délimiteurs. Le calcul n'est pas compliqué, tant que vous vous rappelez qu'
NULL
nécessite un traitement spécial:Démo #2
Vous ne pouvez pas.
strtok
remplace le prochain séparateur de caractères avec un caractère nul (dans l'ordre de résilier le jeton qu'il est de retour, cette fois), et il n'a pas stocker la valeur précédente qu'il remplace. La première fois que vous appelezstrtok
sur votre exemple de chaîne, le;
est allé pour toujours.Vous pourriez faire quelque chose si vous gardez une copie non modifiée de la chaîne que vous modifiez avec
strtok
- compte tenu de l'indice de nul de terminaison pour votre jeton (par rapport au début de la chaîne), vous pouvez regarder le même indice dans la copie et voir ce qui était là.Qui pourrait être pire que d'écrire votre propre code pour séparer la chaîne, bien sûr. Vous pouvez utiliser
strpbrk
oustrcspn
si vous pouvez vivre avec les jeton n'étant pas nul terminée pour vous.Mais avec un peu d'arithmétique des pointeurs que vous pouvez faire quelque chose comme: