C字符串中字符的比较

时间:2010-01-01 10:57:27

标签: c string char

以下程序无效。

#include <string.h>
#include <stdio.h>

int main()
{
    const char *c = "abcdef";

    // prints 'f' as expected
    printf("%c\n", c[5]);

    // comparison fails, does not print "yes"
    if (c[5] == 'f')
        printf("yes");
    return 0;
}

如何将字符串文字中的字符与字符值进行比较?是否可以不使用ASCII相关函数,即chr()或ord()假设存在这些函数。 (我记得在Pascal时代使用过它们)

由于

3 个答案:

答案 0 :(得分:6)

您的环境一定会有其他事情发生。我把它扔进了gcc,并按预期打印出“是”。

你确定你不只是错过了“是”因为默认情况下printf没有添加新行,所以它可能是“是[你的shell提示]”而你只是忽略了是吗?

答案 1 :(得分:4)

我没有看到代码有什么问题,除了:

  • 您应该使用换行符结束输出。我建议puts("yes");(或者如果您想使用printf()printf("yes\n");)。
  • 您不需要string.h
  • 您正在做的比使用ASCII或任何其他编码更好。您可以对所有编码进行比较,而如果您采用ASCII比较,则在使用非ASCII编码的平台上会出现问题。如上所述,这种比较很好。

主要问题似乎是输出没有以换行符结束。

答案 2 :(得分:0)

当您尝试使用5访问索引printf处的字符并获取'f'时。
现在你不是在任何地方修改字符串(你不能将它修改为字符串常量) 稍后您将索引5处的相同char与char常量'f'进行比较。此测试应返回true,并在输出中打印“是”。