比较字符串中的char与给定的char

时间:2012-05-07 23:44:18

标签: c++ c string strcmp

我有以下内容:

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 个答案:

答案 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] == ')')等。请注意单引号(撇号)来表示字符文字。