/ / ¿Por qué no funciona esta comparación entre matrices de caracteres? - c ++, matrices, punteros, operadores

¿Por qué no funciona esta comparación entre matrices de caracteres? - c ++, arrays, punteros, operadores

char a[1][2];
char b[1][2];

a[0][0] = "a";
a[0][1] = "b";
b[0][0] = "a";
b[0][1] = "b";

if(a[0] == b[0]){
cout << "workedn";
}

Por lo que puedo decir, esta comparación entre matrices de caracteres no funciona de la manera que esperarías. La instrucción if no se ejecuta debido a la condición a == b devuelve falso ¿Por qué es esto?

Respuestas

5 para la respuesta № 1

En esta declaración

if(a == b){
cout << "workedn";
}

ayb se convierten implícitamente en punteros aprimeros elementos de las matrices correspondientes. Entonces hay una comparación de dos punteros. Como las matrices ocupan diferentes áreas en la memoria, la condición será siempre igual a falsa.

No existe tal operación como la comparaciónpara matrices Para comparar dos matrices, debe comparar todos los elementos de las matrices entre sí. Por ejemplo, podría usar el algoritmo estándar std :: equal. Por ejemplo

if( std::equal( std::begin( a ), std::end( a ), std::begin( b ) ) ){
cout << "workedn";
}

Otro enfoque es utilizar el contenedor estándar std :: array que tiene el operador de comparación. Por ejemplo

std::array<char, 2> a = { "a", "b" };
std::array<char, 2> b = { "a", "b" };

if(a == b){
cout << "workedn";
}

4 para la respuesta № 2

No puede comparar matrices así. Debe iterar sobre las matrices y comparar cada par de elementos a su vez. Alternativamente (y preferiblemente) reemplace la matriz estática con std::vector. El código que muestra compara el punteros a y b que por supuesto no son iguales.