【问题标题】:Compare between a char in a string to a given char比较字符串中的字符与给定字符
【发布时间】:2012-05-16 11:10:51
【问题描述】:

我有以下:

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 }

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

我应该怎么做?

【问题讨论】:

  • 使用单引号。 ")" == )\0 字面意思,而 ')' == ).
  • strcmp( str, ')' ) ==0) 不起作用,因为您将整个字符串 char* 与单个文字字符进行比较。如果你这样做strcmp( str[0], ')') == 0 我认为会起作用
  • @EdChum strcmp 期望它的参数是字符串。 ')',值41 的字符将转换为(char*)41。因此该函数将查看内存地址41,希望看到一个字符串,而不是 - BAM!段错误。
  • @Imp 好的,我不确定这就是我用 think 注释我的猜测的原因,感谢您指出这一点

标签: c++ c string strcmp


【解决方案1】:

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

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

所以,你可以比较两个字符:

str[0] == ')'

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

strcmp(str, ")") == 0

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

【讨论】:

    【解决方案2】:

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

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

    等等

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          • 1970-01-01
          • 1970-01-01
          • 2011-08-17
          相关资源
          最近更新 更多