【问题标题】:C strcmp fails to compare with spaceC strcmp 无法与空间进行比较
【发布时间】:2014-12-10 13:08:53
【问题描述】:

我尝试查看公式[i] 是否为空格,如果为数字则应为零。但显然它无法比较它们:S 我是 C 新手,所以有人知道问题所在吗?

注意:这不是我的全部代码,而只是理解问题的必要部分。

char formula[50] = "1 4 + 74 /";
int number = 0;

for (int i = 0; i != strlen(formula); i++)
{
    if(!isdigit(formula[i]))
    {
      if (strcmp(&formula[i], " ") == 0)
      {
         number = 0; 
      }
    }
}

【问题讨论】:

  • strcmp 比较的是字符串,而不是字符。您正在将公式的整个后端与包含单个空格的字符串进行比较。他们当然不匹配。

标签: c strcmp


【解决方案1】:

失败是因为字符串" 4 + 74 /"不等于字符串" "

我想你这里真正要比较的是字符,很简单

if (formula[i] == ' ')
{
    // ...
}

为了完整起见,有一种方法可以对两个字符串的前缀进行字符串比较,使用函数strncmp,您可以在其中指定要匹配的字符串的字符数。

if (strncmp(&formula[i], " ", 1))
{
    // ...
}

相当于上面的字符比较。

【讨论】:

  • 谢谢 :) 我实际上首先尝试过,但后来我比较了“”而不是 '',这不起作用:p。感谢您的回答!
【解决方案2】:

那是因为它们不相等。

当您执行&formula[i] 时,您会得到一个指向位置i 的字符的指针。从该位置查看的字符串一直持续到终止 '\0' 字符,即 不是 1 个字符的字符串。

直接对比一下:

if(formula[i] == ' ')

【讨论】:

    【解决方案3】:

    strcmp 比较两个字符串(两个以\0 结尾的const char*s)而不是两个字符。在你的情况下,使用

    if(formula[i]==' ')
    

    【讨论】:

      【解决方案4】:

      &formula[i] 给你一个指向 i 被分配位置的指针。

      要解决问题,您必须执行以下操作:

      if (formula[i] == ' ')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        相关资源
        最近更新 更多