La comparaison de caractères dans un tableau de caractères avec strcmp
J'ai lu d'un fichier xml dans un char [] et je suis en train de comparer chaque élément de ce tableau avec certains caractères, tels que "<" et ">". Le char array "test" est juste un tableau d'un élément et contient le caractère à comparer (j'ai dû faire comme ceci ou le strcmp méthode pourrait me donner une erreur sur la conversion de char contre char*). Cependant, quelque chose est faux et je ne peux pas le comprendre. Voici ce que j'obtiens:
< est par rapport à: < strcmp valeur: 44
Une idée de ce qui se passe?
char test[1];
for (int i=0; i<amountRead; ++i)
{
test[0] = str[i];
if( strcmp(test, "<") == 0)
cout<<"They are equal"<<endl;
else
{
cout<<test[0]<< " is being compare to: "<<str[i]<<" strcmp value= "<<strcmp(test, "<") <<endl;
}
}
- Vous devez comprendre les erreurs comme
char
àconst char*
et fixer avec votre compréhension, pas de hack autour d'elle. Aussi, nous montrant la sortie que vous obtenez n'est pas une erreur, nous n'avons aucune idée de ce qu'est réellement censée dire. 🙂 Enfin, c'est le C++! Utilisationstd::string
et rendre votre vie plus facile. - vous comparez un élément à la fois, vous n'avez pas besoin de comparer des chaînes de caractères. comparer char au lieu de cela,
'<' == str[i]
- Je voudrais utiliser la classe string, mais je suis de la lecture d'un fichier xml qui pourrait potentiellement avoir pas d'espace (c'est à dire <blablabla>asdfsaf</blah><bizarre>asdfsaf</bizarre> Alors j'ai pensé que le meilleur moyen serait de faire caractère par caractère. De toute façon le ""< " = = str[i]" a fini par travailler (bien que j'ai juré que j'ai déjà essayé). Merci.
Vous devez vous connecter pour publier un commentaire.
vous devez 0 résilier votre chaîne de test.
Mais si vous avez toujours l'intention de comparer les caractères un à un, puis le temp de la mémoire tampon n'est pas nécessaire à tous. Vous pouvez faire cela au lieu
strcmp
à tous. 😛 ce serait piratage le piratage.if (str[i] == '<'
fait plus de sens que le code actuel, mais strcmp a plus de sens si le plan est de comparer les grandes sections plus tard.strcmp()
attend de ses deux paramètres à une valeur null chaînes, pas de simples caractères. Si vous voulez comparer les caractères de l'égalité, vous n'avez pas besoin d'appeler une fonction, il suffit de comparer les caractères:strcmp veut à la fois les cordes à 0 résilié.
Lorsque vous avez 0 non mis fin chaînes, utilisez strncmp:
C'est à vous de faire en sorte que les deux chaînes sont au moins N caractères (où N est la valeur de la 3e paramètre). strncmp est une bonne fonctions à avoir dans votre mental toolkit.