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