I have the following:
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;
}
The warning i get is comparison between an int and a char.
I tried to do the comparison (first char in the string vs. given char) also with strcmp like this:
if (strcmp(str, ")")==0) { stuff }
but it never goes in to 'stuff' even when the comparison (should) be correct.
how should i do it?
If str
is a C string (null-terminated array of chars), then str[0]
is a char.
Note that the type of quotes matters! ')'
is a char, while ")"
is a string (i.e. a ')'
char followed by a null terminator).
So, you may compare two chars:
str[0] == ')'
or you may compare two strings
strcmp(str, ")") == 0
naturally, (the second works if str
string really only contains that parenthesis).
You're comparing a character (str[0]
) with a const char[N]
("whatever"
). You need to use single quotes because double quotes denote character arrays, whereas single quotes denote single characters:
if (str[0] == ')') // or *str == ')'
Etc.
The reason why strcmp
was failing as well was because, while the string at some time does point to the )
, it has more characters beyond that (i.e. is not followed immediately by a '\0'
) so the string is not equivalent to the string ")"
which has one character.
Double quotes, "
are string delimiters, so ")"
is a pointer to a string literal in if(str[0] == "(")
.
You want to compare to a character, so you have to use single quotes
if(str[0] == '(')
You need if (str[0] == ')')
etc. Note the single quotation marks (apostrophes) to denote character literals.