Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串中的字符与给定字符进行比较_C++_C_String_Strcmp - Fatal编程技术网

C++ 将字符串中的字符与给定字符进行比较

C++ 将字符串中的字符与给定字符进行比较,c++,c,string,strcmp,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) { ret

我有以下资料:

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;
}
但是,即使比较(应该)是正确的,它也永远不会涉及“东西”

我该怎么做

双引号,
是字符串分隔符,因此
是指向
if(str[0]==”(”)
中字符串文字的指针。 要与字符进行比较,必须使用单引号

if(str[0] == '(')

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

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


strcmp
失败的原因也是因为,虽然字符串在某些时候确实指向
,但它有更多的字符(即后面没有紧跟一个
'\0'
),因此该字符串不等同于只有一个字符的字符串“”。

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

如果
str
是C字符串(以null结尾的字符数组),则
str[0]
是字符

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

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

str[0] == ')'
或者您可以比较两个字符串

strcmp(str, ")") == 0

自然,(如果
str
string实际上只包含括号,则第二种方法有效)。

使用单引号。
“==)\0
字面意思,而
)'==)
strcmp(str')“)==0)不起作用,因为您正在将整个字符串字符*与单个文字字符进行比较。如果您执行了
strcmp(str[0],“)”)==0think@EdChum
strcmp
要求其参数为字符串。“)”,值为
41
的字符将转换为
(字符*)41
。因此,函数将查看内存地址
41
,希望看到一个字符串,而不是-BAM!Segfault.@Imp好的,我不确定这就是为什么我用think注释我的猜测,谢谢你指出这一点
strcmp(str, ")") == 0