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@EdChumstrcmp
要求其参数为字符串。“)”,值为41
的字符将转换为(字符*)41
。因此,函数将查看内存地址41
,希望看到一个字符串,而不是-BAM!Segfault.@Imp好的,我不确定这就是为什么我用think注释我的猜测,谢谢你指出这一点
strcmp(str, ")") == 0