【问题标题】:How can this statement be simplified?如何简化这种说法?
【发布时间】:2017-07-21 06:10:59
【问题描述】:

我正在学习 c++,并且在其他语言方面有一些经验,我正在转移很多知识,但并非所有知识都可以转移。

我的 IDE 告诉我可以简化此语句,但我不明白如何简化?

if (answer[0] == 'y'||answer[0] == 'Y')
{
    return true;
}

【问题讨论】:

  • 可能需要更多上下文才能找到解决方案。请提供minimal reproducible example
  • @kichik 这似乎对编码做了一些假设......
  • 这是唯一的“如果”还是有更复杂的逻辑树?例如。有“其他”吗?还是在外部“如果”内?
  • return (answer[0] == 'y' || answer[0] == 'Y');可能就足够了。
  • @DavidBowling 假设只有一个else return false;

标签: c++ if-statement simplify


【解决方案1】:

你可以使用std::tolower:

if (std::tolower(answer[0]) == 'y')
    return true;

当大小写无关紧要时,这也是您应该从用户那里获得输入的方式,而不是硬编码大小写。

注意:理论上,您需要确保 answer[0] 在有效范围内,否则您将获得未定义的行为(例如,对于非 ASCII 字符和另一个 std::locale)。您的 std::locale 在理论上也很重要,但如果您只处理 ASCII 字符,情况很少见。

【讨论】:

  • 那么他将如何检查答案[0]是否在有效范围内 它不会添加另一个检查来验证范围吗?
  • @ItbanSaeed 理论上是的,但实际上不是。 非常字符很少超出unsigned char的范围。
  • std::tolower 是否有任何性能改进或只是语法的选择?
  • 通常提醒:您不能将char 直接传递给tolower,您必须将其转换为unsigned char,否则您将面临未定义行为的风险。您的程序与至少一个广泛使用的 C 运行时库一起崩溃。在您修复此答案之前,这是 -1。
  • 我非常怀疑这就是 OP 的 IDE 所考虑的。
猜你喜欢
  • 2022-11-02
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多