【问题标题】:Best way to compare ASCII value比较 ASCII 值的最佳方法
【发布时间】:2014-03-29 00:16:04
【问题描述】:

大家好,我刚开始学习 c 类,我有一个关于比较 C 中的 ASCII 值的问题。

假设我有单词“hello”,我想检查 ASCII 表中的“h”是否匹配 104,通常它会匹配。因此,我使用以下代码来执行此操作,尽管我似乎发现这种方法效率不高。所以我想知道是否还有其他方法。

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

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

非常感谢!

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

("%d", word[0])

【问题讨论】:

  • 我以前从未见过,而且我已经使用 C 很长时间了。但这并不意味着什么。您可以使用word[0]=='h'
  • @krowe 回答了你的问题,所以请注意:即使你只有一个语句,也总是用花括号括起来你的条件块......但是。
  • @fejese 好的,我会记住的,有什么特别的原因我应该避免使用“puts”之类的东西吗?我有 Java 背景,所以我习惯了条件块,但“puts”之类的东西是新事物,这就是我开始使用它们的原因。
  • @Glenndisimo:谁说你应该避免看跌期权?它(一种可能)等同于 Java 的 System.out.println
  • @Glenndisimo 我的意思是你应该写if (word[0] == 104) puts("Yay"); 而不是if (word[0] == 104) { puts("Yay"); }(注意花括号)。这是为了避免以后添加语句或只是不小心重复一行时出现问题(请参阅本文中的“什么是错误?”部分以获取一个很好的示例:theguardian.com/technology/2014/feb/25/…

标签: c compare ascii


【解决方案1】:

您的("%d", word[0]) 看起来像是缺少printfprintf 调用。但是由于您没有调用函数,所以它根本不是那样的。它只是一个逗号运算符,它计算左侧参数 ("%d"),将结果丢弃,并使用右侧参数。

"%d" 是一个没有副作用的表达式,所以对它求值没有任何作用。

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

【讨论】:

    【解决方案2】:

    可以直接比较C中的charint类型,所以如下代码:

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

    如果等同于你的 sn-p。

    【讨论】:

      【解决方案3】:
      char word [] = "hello";
      if (("%d", word[0]) == 104) puts("Yay");
      

      等效代码为:

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

      最后的变换:

      puts("Yay");
      
      • 如果您使用多个用逗号分隔的表达式,它们会按顺序计算,最后一个确定结果。
      • 另外,您可以像我的回答一样直接使用字符常量。请注意多字符常量,它们是合法的,但不可移植,因此也没有真正的用处。
      • 接下来,即使没有启用优化,大多数编译器在常量折叠方面都做得不错,因此效率并不低。
      • 最后,如果可能,这些常量用于删除控制结构。

      【讨论】:

        猜你喜欢
        • 2018-04-03
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多