Comparación de dos matrices de caracteres en C++ utilizando el operador de comparación.
¿Cómo funciona el operador de comparación al comparar dos arreglos de caracteres?
Considere el siguiente programa:
#include <iostream>
using namespace std;
int main()
{
char arr1[5] = { 'T','e','s','t' };
char arr2[10] = { 't','e' };
if (arr1 < arr2)
cout << "Yes";
else if (arr1 > arr2)
cout << "No";
else
cout << "0";
}
La forma en que lo sé es que debería imprimir “Yes” porque el primer carácter de arr1
tiene un valor ASCII de 84
, mientras que el valor ASCII del primer carácter de arr2
es 116
, por lo que técnicamente debería imprimir “Yes”.
Sin embargo, este programa da como resultado “No” cuando se ejecuta en Visual Studio.
Pensé que podría estar comparando las direcciones de los arreglos de caracteres. Para probar esto, intercambié los nombres de las variables y ejecuté este programa:
#include <iostream>
using namespace std;
int main()
{
char arr2[5] = { 'T','e','s','t' };
char arr1[10] = { 't','e' };
if (arr1 < arr2)
cout << "Yes";
else if (arr1 > arr2)
cout << "No";
else
cout << "0";
}
Pero esto nuevamente dio como resultado “Yes” como salida, lo que significa que las direcciones de los arreglos de caracteres no importaban en la comparación.
¿Alguien puede decirme cómo se está haciendo esta comparación?
davy.ai
Cuando se realiza una comparación entre dos arreglos de caracteres, el operador de comparación compara cada carácter de los arreglos uno por uno, de izquierda a derecha, hasta que se encuentre una diferencia o uno de los arreglos termine antes que el otro. La comparación se basa en los valores ASCII de los caracteres.
En el programa dado, la instrucción
if
está comparandoarr1
yarr2
utilizando los operadores<
y>
. Dado quearr2
tiene menos elementos quearr1
, la comparación se detiene después de que el segundo carácter dearr2
se compara con el segundo carácter dearr1
.El valor ASCII de
'e'
es101
, mientras que el valor ASCII de'T'
es84
. Por lo tanto, la condiciónarr1 < arr2
es falsa y el programa ejecuta la instrucciónelse if
, que comparaarr1
yarr2
utilizando el operador>
. Nuevamente, dado que la comparación se detiene después de dos elementos, la condiciónarr1 > arr2
es verdadera y el programa muestra"No"
.Es importante tener en cuenta que los arreglos de caracteres en C++ se comparan utilizando la aritmética de punteros, no la comparación directa de los valores de los caracteres. Los operadores de comparación comparan las direcciones de memoria de los arreglos, por lo que intercambiar los nombres de las variables en el programa no afecta la salida.