9

我有以下内容:

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 }

但即使比较(应该)是正确的,它也永远不会进入“东西”。

我该怎么做?

4

4 回答 4

20

如果str是 C 字符串(以空字符结尾的字符数组),那么str[0]是字符。

请注意,引号的类型很重要!')'是一个字符,")"而是一个字符串(即一个')'字符后跟一个空终止符)。

因此,您可以比较两个字符:

str[0] == ')'

或者你可以比较两个字符串

strcmp(str, ")") == 0

自然,(如果str字符串真的只包含该括号,则第二个有效)。

于 2012-05-07T23:47:41.293 回答
7

您正在将字符 ( str[0]) 与const char[N]( "whatever") 进行比较。您需要使用单引号,因为双引号表示字符数组,而单引号表示单个字符:

if (str[0] == ')') // or *str == ')'

等等。

失败的原因strcmp也是因为,虽然字符串在某些时候确实指向),但它有更多的字符(即不紧跟 a '\0'),所以字符串不等于")"只有一个字符的字符串。

于 2012-05-07T23:46:41.303 回答
2

双引号"是字符串分隔符,")"指向字符串文字的指针也是如此if(str[0] == "(")。你想比较一个字符,所以你必须使用单引号

if(str[0] == '(')
于 2012-05-07T23:46:37.720 回答
1

您需要if (str[0] == ')')等。注意单引号(撇号)表示字符文字。

于 2012-05-07T23:46:48.760 回答