【问题标题】:How can I check whether multiple variables are equal to the same value?如何检查多个变量是否等于同一个值?
【发布时间】:2011-11-20 07:47:59
【问题描述】:

如何比较多个项目?例如,我想检查所有变量 A、B 和 C 是否都等于字符“X”,或者所有三个都等于“O”。 (如果其中 2 个是 X,一个是 O,它应该返回 false。)

我试过:

if (A, B, C == 'X' || A, B, C == 'O') 
  {
    //Do whatever
  }

但它没有用。做这个的最好方式是什么?

【问题讨论】:

  • 顺便说一句,用数组代替 A、B、C 变量不是更好吗?只是问问
  • 我正在使用一个变量。 A、B、C 我的意思是:myArray[0]、myArray[1]、myArray[2]。
  • 除了下面的答案或只是简单地一一测试之外,似乎没有其他方法可以做到这一点。谢谢。

标签: c++


【解决方案1】:
if((A == 'X' || A == 'O') && A == B && B == C)
{
    // Do whatever
}

【讨论】:

  • 为什么要把简单的事情复杂化?
  • @Kos:为什么我的很复杂,为什么它很简单?
  • 我同意@Kos - 这应该写成扩展形式,以便其他程序员更容易准确地理解你在做什么。无论如何,编译器比我们能更好地优化这些布尔条件。
  • 不抱歉。我需要一个表达式,如果 A、B 和 C 都等于 O 或 X,它将返回 true。如果一个是 O,另一个是 X,它应该返回 false。我更改我的帖子以使其更清楚。
  • @Kos 我找到这段代码很多比OP试图写的更清楚。这里没有“技巧”;只是基本逻辑。
【解决方案2】:

只是为了多样性:

template <typename T, typename U>
bool allequal(const T &t, const U &u) {
    return t == u;
}

template <typename T, typename U, typename... Others>
bool allequal(const T &t, const U &u, Others const &... args) {
    return (t == u) && allequal(u, args...);
}

if (allequal(a,b,c,'X') || allequal(a,b,c,'O')) { ... }

【讨论】:

  • 多谢!你只是给了我制作一个功能来实现这个的想法!
【解决方案3】:

只需将它们分开并一一测试:

if (A == 'O' && B == 'O' && C == 'O' || A == 'X' && B == 'X' && C == 'X')
    // etc

【讨论】:

  • 您需要在那里添加 (),否则它基本上会一个接一个地进行,而不是您打算分别测试两个组并 oring 他们。
  • @Dani 我相信你,但你能解释一下为什么吗?运算符按优先级降序排列是==然后&amp;&amp;然后||,对吧?这不是说所有的==都先完成,然后是&amp;&amp;,然后是||吗?这不对吗?
  • 不,&amp;&amp;|| 具有相同的优先级,所以首先所有的 == 都会发生,然后是 2 &amp;&amp; 然后是 || 然后是最后一个 &amp;&amp;
  • @Dani:那不是真的,&amp;&amp;|| 的优先级不同。 &amp;&amp; 的优先级高于 ||
猜你喜欢
  • 2019-11-17
  • 2021-03-28
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多