比较字符串中的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] == ')')等。注意单引号(撇号)来表示字符文字。