Comparer entre un char dans une chaîne de caractères à un char
J'ai le texte suivant:
int findPar(char* str)
{
int counter=0;
while (*str)
{
if(str[0] == "(") <---- Warning
{
counter++;
}
else if (str[0]== ")") <---- Warning
{
counter--;
}
if (counter<0)
{
return 0;
}
str++;
}
if (counter!=0)
{
return 0;
}
return 1;
}
L'avertissement que j'obtiens est la comparaison entre un int et un char.
J'ai essayé de faire la comparaison (le premier caractère dans la chaîne de contre donné char) également avec strcmp comme ceci:
if (strcmp(str, ")")==0) { stuff }
mais il ne va jamais à "autre chose", même si la comparaison (devrait) être correct.
comment dois je faire?
Utilisez des guillemets simples.
OK, je n'étais pas sûr de la raison pour laquelle j'ai annoté je pense que pensez, merci pour cette remarque
")" == )\0
littéralement, tandis que ')' == )
.strcmp( str, ')' ) ==0)
ne fonctionne pas parce que vous êtes la comparaison de l'ensemble de la chaîne de caractères char* contre un seul caractère littéral. Il pourrait fonctionner si vous n'avez strcmp( str[0], ')') == 0
je pensestrcmp
attend des paramètres de chaîne de caractères. ')', un char de la valeur 41
seront convertis en (char*)41
. Donc la fonction va chercher dans la mémoire de l'adresse 41
, l'espoir de voir une chaîne de caractères et au lieu - BAM! Erreur de segmentation.OK, je n'étais pas sûr de la raison pour laquelle j'ai annoté je pense que pensez, merci pour cette remarque
OriginalL'auteur Itzik984 | 2012-05-07
Vous devez vous connecter pour publier un commentaire.
Si
str
est une chaîne C (null tableau de caractères), puisstr[0]
est un char.Noter que le type de guillemets!
')'
est un char, tandis que")"
est une chaîne de caractères (c'est à dire un')'
char suivie par un terminateur null).Ainsi, vous pouvez comparer deux caractères:
ou vous pouvez comparer deux chaînes de
naturellement, (la seconde fonctionne si
str
chaîne vraiment ne contient que de la parenthèse).OriginalL'auteur Imp
Vous êtes à la comparaison d'un personnage (
str[0]
) avec unconst char[N]
("whatever"
). Vous avez besoin d'utiliser les guillemets simples parce que les guillemets doubles désigner des tableaux de caractères, alors que les guillemets simples désigner les caractères simples:Etc.
La raison pour laquelle
strcmp
n'était pas ainsi parce que, tandis que la chaîne de caractères à un certain moment n'est point à la)
, il a plus de caractères au-delà de cela (c'est à dire n'est pas suivie immédiatement par une'\0'
) de sorte que la chaîne n'est pas équivalent à la chaîne")"
qui a un caractère.OriginalL'auteur Seth Carnegie
Guillemets,
"
sont les délimiteurs de chaînes, de sorte")"
est un pointeur vers une chaîne de caractères littérale dansif(str[0] == "(")
.Vous souhaitez comparer à un personnage, donc vous devez utiliser des guillemets simples
OriginalL'auteur Daniel Fischer
Vous avez besoin
if (str[0] == ')')
etc. Notez les guillemets simples (apostrophes) pour représenter les chaînes de caractères.OriginalL'auteur Kerrek SB