比较ASCII值的最佳方法

时间:2014-03-29 00:16:04

标签: c compare ascii

嘿伙计们我刚刚开始上c级课程,我有一个关于比较C中ASCII值的问题。

我们说我有#34;你好"我想检查一下" h"在ASCII表中匹配104,通常它会。所以我使用下面的代码来做到这一点,虽然我似乎发现这种方法不是很有效。所以我想知道是否还有其他方法。

char word [] = "hello";
if (("%d", word[0]) == 104) puts("Yay");

对不起,如果这是一个愚蠢的问题,但在我眼中看起来并没有那么高效。

非常感谢!

编辑:我发现效率低下的部分是:

("%d", word[0])

3 个答案:

答案 0 :(得分:4)

您的("%d", word[0])看起来像是printf来自printf的电话。但是既然你没有调用函数,那就完全没有了。它只是一个逗号运算符,它计算左参数("%d"),抛出结果,并使用正确的参数。

"%d"是一个没有副作用的表达式,所以评估它什么都不做。

您的测试可以缩短为if(word[0] == 104),它可以做同样的事情。或者甚至更好,将其缩短为if(word[0] == 'h'),但仍然相同但可读。

答案 1 :(得分:2)

您可以直接在C中比较charint类型,因此以下代码:

char word[]  = "hello";
if(word[0] == 104) puts("Yay");

如果等同于您的代码段。

答案 2 :(得分:0)

char word [] = "hello";
if (("%d", word[0]) == 104) puts("Yay");

等效代码为:

if('h' == 104) puts("Yay");

最终改造:

puts("Yay");
  • 如果您使用以逗号分隔的多个表达式,则会按顺序对它们进行求值,最后一个用于确定结果。
  • 另外,您可以直接使用我的答案中的字符常量。请注意多字符常量,这些常量是合法的,但不可移植,因此也没有用处。
  • 接下来,即使没有启用优化,大多数编译器也会在恒定折叠时完成一项可信的工作,因此效率不高。
  • 最后,如果可能,这些常量用于删除控制结构。