es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for 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á comparando arr1 y arr2 utilizando los operadores < y >. Dado que arr2 tiene menos elementos que arr1, la comparación se detiene después de que el segundo carácter de arr2 se compara con el segundo carácter de arr1.

    El valor ASCII de 'e' es 101, mientras que el valor ASCII de 'T' es 84. Por lo tanto, la condición arr1 < arr2 es falsa y el programa ejecuta la instrucción else if, que compara arr1 y arr2 utilizando el operador >. Nuevamente, dado que la comparación se detiene después de dos elementos, la condición arr1 > 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.

Comments are closed.