2011-11-19 25 views
10

¿Cómo comparo varios artículos? Por ejemplo, deseo verificar si todas las variables A, B y C son iguales a la char 'X' o las tres son iguales a 'O'. (Si 2 de ellos son X y un O es que debe devolver false.)¿Cómo puedo verificar si múltiples variables tienen el mismo valor?

Traté:

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

pero no funcionó. ¿Cuál es la mejor manera de hacer esto?

+0

Por cierto, ¿no estaría mejor con una matriz en lugar de A, B, C variables? Solo pregunté – Kos

+0

Estoy usando una variable. Por A, B, C Quiero decir: myArray [0], myArray [1], myArray [2]. –

+1

Parece que no hay otra manera que hacer esto que no sea la respuesta a continuación o simplemente probarlos uno por uno. Gracias de todos modos. –

Respuesta

14
if((A == 'X' || A == 'O') && A == B && B == C) 
{ 
    // Do whatever 
} 
+2

¿por qué complicar una cosa simple? – Kos

+0

@Kos: ¿por qué mi es complicado y por qué es algo simple? – Dani

+0

Estoy de acuerdo con @Kos: esto debe escribirse como la forma expandida para que otros programadores entiendan mejor lo que estás haciendo. Los compiladores optimizan estas condiciones booleanas mejor que nosotros, de todos modos. –

1

Sólo separarlos y les probar uno por uno:

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

Necesita agregar '()' allí o básicamente irá uno por uno y no su intención de probar dos grupos por separado y 'o'ing ellos. – Dani

+0

@ Dani Te creo, pero ¿me explicarás por qué? Los operadores en orden de precedencia descendente son '==' luego '&&' luego '||', ¿verdad? ¿Eso no significa que todo el '==' se hace primero, luego el '&&', luego el '||'? Y no es eso correcto? –

+0

no, '&&' y '||' tienen la misma precedencia, entonces primero todo '==' sucederá, luego 2 '&&' luego '||' y luego el último '&&' – Dani

11

sólo por la variedad:

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')) { ... } 
+0

¡Muchas gracias! ¡Me acabas de dar la idea de hacer una función para lograr esto! –

+1

Me encanta esto, apoyos en C++ 11. –

Cuestiones relacionadas