À l'aide de strtok pour diviser la chaîne
char *strings[30];
char Policystr[4096] = "the|string|to|split";
char delims[] = "|";
int i = 0;
strings[i] = strtok( Policystr, delims )
while( strings[i] != NULL )
{
MessageBoxA(NULL,strings[i],"stringsComparison",MB_OK);
strings[++i] = strtok( NULL, delims );
}
for ( int j = 0; j < i; j++ )
{
MessageBoxA(NULL,strings[j],"strings",MB_OK);
}
je suis novice en C++ je reçois toutes les chaînes dans la première boucle, si je suis en mesure d'imprimer le même dans la deuxième boucle, je ne sais pas j'y suis pas arriver
merci d'avance
MessageBoxA(NULL,strings[j],"stringsComparison",MB_OK);
Qui ne peut pas être de droite.j
ne change jamais dans la boucle du haut et, en fait, n'existe pas.- Essayez de changer
strings[j]
àstrings[i]
dans la première boucle... - Si vous êtes à l'aide de C++, voir si vous pouvez utiliser
std::string
etstd::vector
. Le fractionnement d'unestd::string
est trivial, surtout compte tenu deboost
a probablement quelque chose exactement à cette fin, mais même sansboost
il devrait être facile. - strtok() est la source de tous les maux ... Si vous voulez VRAIMENT éviter de stimuler, au moins utiliser strtok_s().
strtok_r
pour POSIX.- NE PAS UTILISER STRTOK
- NE PAS UTILISER SIMPLEMENT DES TABLEAUX DE CHAR
Vous devez vous connecter pour publier un commentaire.
De sortie:
#include <cstdio>
etc,std::cout
, écrireint main()
, utilisezstd::string
.while
boucle tokenizes la chaîne jusqu'à cestrtok
retourneNULL
indiquant une absence de plus de jetons. Lorsque vous passez uneNULL
comme premier paramètre destrtok
, il retourne le prochain jeton.Votre question est marqué, C++, mais de la manipulation de chaîne de données comme un programmeur en C, à partir de 1985 (no offense, c'est juste que l'utilisation de
strtok
est généralement déconseillé d'aujourd'hui). Puisque vous êtes à l'aide de C++, je vous recommande d'éviter les fonctions de la bibliothèque C et au lieu d'utiliser des fonctionnalités disponibles dans la Norme C++ de la Bibliothèque. Ici est entièrement autonome de travail exemple d'une façon de découper unstd::string
en C++. Je suis assez novice en C++ si cela peut ne pas être le moyen le plus efficace. Les avantages de cette approche sont:Gestion de la mémoire est gérée automatiquement, sans arbitraire des limites imposées par votre programme sur la taille de l'entrée ou de la sortie.
Pas utiliser de vieux (et déconseillé) de la bibliothèque C de la fonction.
Vous n'avez pas à modifier l'original des données d'entrée pour diviser la chaîne, ce qui signifie que vous pouvez fonctionner sur const qualifiés d'entrée. C'est quelque chose qui
strtok
est incapable de le faire, parce questrtok
modifie l'entrée d'origine.Vous pouvez toujours utiliser cette méthode si vous avez un
char *
ouchar []
tampon, parce que vous pouvez la transformer enstd::string
(si elle n'est pas terminée par un caractère nul, vous devrez également fournir le constructeur de la longueur de la mémoire tampon).Si vous souhaitez créer un message à partir d'un des
std::string
objets dans le vecteur, vous pouvez utiliser le.c_str()
fonction de membre, par exempleEssayer de initlaize
i=0
avant de commencer à l'utiliser. Dans la première boucle, vous devez écrireMessageBoxA(NULL,strings[i],"stringsComparison",MB_OK);