我有以下内容:
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;
}
我得到的警告是int和char之间的比较。
我尝试使用strcmp进行比较(字符串中的第一个字符与给定的字符):
if (strcmp(str, ")")==0) { stuff }
但即使比较(应该)正确,它也永远不会进入'东西'。
我应该怎么做?答案 0 :(得分:17)
如果str
是一个C字符串(以空字符结尾的字符数组),那么str[0]
就是一个字符。
请注意,报价的类型很重要! ')'
是一个字符,而")"
是一个字符串(即')'
字符后跟一个空终止符。)
所以,你可以比较两个字符:
str[0] == ')'
或者您可以比较两个字符串
strcmp(str, ")") == 0
自然地,(如果str
字符串真的只包含该括号,则第二个起作用。)
答案 1 :(得分:4)
您要将字符(str[0]
)与const char[N]
("whatever"
)进行比较。您需要使用单引号,因为双引号表示字符数组,而单引号表示单个字符:
if (str[0] == ')') // or *str == ')'
等
strcmp
失败的原因是因为,虽然字符串在某个时间确实指向)
,但它有更多的字符(即不会立即跟'\0'
1}})所以字符串不等同于具有一个字符的字符串")"
。
答案 2 :(得分:2)
双引号,"
是字符串分隔符,因此")"
是指向if(str[0] == "(")
中字符串文字的指针。
您想要与角色进行比较,因此您必须使用单引号
if(str[0] == '(')
答案 3 :(得分:1)
您需要if (str[0] == ')')
等。请注意单引号(撇号)来表示字符文字。