c-比较ASCII值的最佳方式



嘿,伙计们,我刚开始学习c类,我有一个关于比较c.中ASCII值的问题

假设我有单词"hello",我想检查ASCII表中的"h"是否与104匹配,通常情况下会匹配。因此,我使用下面的代码来实现这一点,尽管我似乎发现这种方法并不有效。所以我想知道是否还有其他方法。

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

很抱歉,如果这是一个愚蠢的问题,但在我看来似乎没有那么有效。

非常感谢!

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

("%d", word[0])

您的("%d", word[0])看起来像是缺少printfprintf调用。但既然你不是在调用一个函数,那就根本不是这样了。它只是一个逗号运算符,用于计算左参数("%d"(,丢弃结果,并使用右参数。

"%d"是一种没有副作用的表达,因此评估它完全没有任何作用。

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

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

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

如果与您的代码段等效。

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

等效代码为:

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

最后的转换:

puts("Yay");
  • 如果使用由逗号分隔的多个表达式,则会按顺序对它们求值,最后一个表达式决定结果
  • 此外,您可以直接使用字符常量,如我的答案中所示。只需注意多字符常量,它们是合法的,但不可移植,因此也不真正有用
  • 其次,即使没有启用优化,大多数编译器在恒定折叠方面也做得很好,所以效率并不低
  • 最后,如果可能的话,这些常数用于删除控制结构

相关内容

  • 没有找到相关文章

最新更新