Considérons l'extrait de code suivant qui utilise strtok pour diviser la chaîne madddy.Essayer de comprendre strtok
char* str = (char*) malloc(sizeof("Madddy"));
strcpy(str,"Madddy");
char* tmp = strtok(str,"d");
std::cout<<tmp;
do
{
std::cout<<tmp;
tmp=strtok(NULL, "dddy");
}while(tmp!=NULL);
Cela fonctionne très bien, la sortie est Ma. Mais en modifiant le strtok à ce qui suit,
tmp=strtok(NULL, "ay");
La sortie devient Madd. Alors, comment strtok fonctionne-t-il exactement? J'ai cette question parce que je m'attendais à ce que strtok prenne comme délimiteur tous les caractères qui se trouvent dans la chaîne de délimitation. Mais dans certains cas, c'est comme ça, mais dans quelques cas, cela donne des résultats inattendus. Quelqu'un pourrait-il m'aider à comprendre cela?
Je pense honnêtement la bonne façon de le faire est d'arrêter complètement en utilisant 'strtok'. C'est une fonction difficile à utiliser, difficile à déboguer sans aucune garantie de sécurité. Il vaut probablement mieux utiliser une combinaison de 'string :: find' et' string :: substr' pour faire l'analyse. – templatetypedef
Ou 'boost :: token_iterator' –
Je suis prêt à répéter cela pour l'importance et l'emphase, d'autant plus que vous utilisez C++ et non C. Aussi, vous voudrez peut-être regarder dans boost :: tokenize. –