Comparar cadenas en C++ sin importar mayúsculas o minúsculas

 

¿Cómo comparar cadenas en C++?

Para comparar dos cadenas, en c++, se puede hacer uso de dos funciones distintas, “strncmp” y “strcmp” las cuales se encuentran en la biblioteca <cstring> por lo que será necesario incluirla.

La diferencia entre estas funciones es que la  función “strcmp” compara las cadenas hasta que un caracter  sea diferente o hasta que se termine la cadena, y la función  “strncmp” compara las cadenas hasta que un caracter sea diferente, o se termine la cadena, o hasta que llegue al numero de caracteres que se quería comparar (el cual se determina al hacer uso de ésta función), lo que pase primero. la forma de hacer uso de estas funciones es la siguiente:

strnmp ( nomdecadena1  , nomdecadena2)

siendo la primer cadena mencionada la que se usara como base para comparar la otra.

Al hacer uso de éstas funciones los valores que nos devuelve son números, los cuales pueden ser 0, 1 o -1.

  • -1 : si el valor devuelto es igual a menos unos quiere decir que la cadena tiene un valor menor, o que va antes alfabéticamente con respecto a la cadena con la que se comparó.
  • 0 : si el valor devuelto es cero quiere decir que las cadenas son iguales.
  • 1 : si el valor devuelto es igual a menos unos quiere decir que la cadena tiene un valor mayor, o que va después alfabéticamente con respecto a la cadena con la que se comparó.

Ejemplo

Para entender esto mejor a continuación hay un ejemplo de un código para comparar dos cadenas, con la función “strcmp”.

y entonces el usuario al ejecutar este programa se vera así:

imagen-1Vemos que cuando compara la cadena 1 con respecto a la 2 nos arroja el valor de -1, esto es por manzana (cadena1) va antes alfabéticamente que manzano (cadena2); y cuando compara la cadena 2 con respecto a la 1 nos da el valor de 1 porque manzano (cadena2) va después alfabéticamente que manzana (cadena1). Por el contrario si hubiéramos puesto que ambas cadenas se llaman manzana, al haber hecho la comparación hubiéramos obtenido el valor de 0, porque manzana es lo mismo que manzana.

Ejemplo

Ahora analicemos como funciona “strcnmp”. Como ya se mencionó anteriormente la diferencia de esta función con “strcmp” es que aquí vamos a decirle hasta que caracter quiero que haga la comparación.

Al ejecutar este programa veremos que nos arroja un 0, ya que  ahí esta indicado que haga la comparación hasta el segundo caracter, y en la cadena 1 y 2 los primeros dos caracteres son iguales, es por eso que el valor es cero, porque hasta donde esta indicada la comparación las cadenas son iguales.

Convertir las cadenas a caracteres iguales

Como sabemos en el código acii los caracteres “a” y “A” son caracteres diferentes, por lo que si en un programa tenemos una cadena que se llama “DelFin” y otra que se llama “delfin” son cadenas distintas aunque nosotros mismo, ya que se van a tomar como caracteres diferentes. Por lo tanto si queremos comparar cadenas sin importar las mayúsculas ni las minúsculas debemos convertirlas a mayúsculas o a minúsculas.

Se puede elegir a que es lo que se quiere convertir si a mayúsculas o a minúsculas; si se quiere convertir a mayúsculas se utiliza la función “toupper” y si se quiere convertir a minisculas se utiliza la función “tolower”. Para hacer uso de estas funciones necesitamos la biblioteca <cctype>. Además junto con estas funciones usaremos un ‘for’ el cual le va a indicar que vaya convirtiendo cada caracter de la cadena a mayúsculas o a minúsculas (dependiendo de la función). La manera de convertir las cadenas es la siguiente:

for ( i = 0; cadena [ i  ]; i++ )  {

                   cadena [ i ] = toupper ( cadena [ i ] ;

                                                                     }

Ejemplo

A continuación un ejemplos de código para convertirlas a un mismo caracter:

y entonces si ejecutamos el programa el usuario vera esto:

imagen-2y si utilizamos la función “tolower” entonces vera esto:

imagen-3Comparar cadenas sin importar mayúsculas ni minúsculas

Anteriormente en este documento ya se explicó cómo se comparan dos cadenas, y cómo se convierten las cadenas a mayúsculas o a minúsculas, este ultimo es importante ya que si queremos comparar dos cadenas sin importar mayúsculas ni minúsculas lo primero que se debe de hacer es convertir éstas a un solo tipo, porque sino se hace esto entonces al compararlas si dicen lo mismo pero una en mayúsculas y otra en minúsculas (o revuelto) marcara que las cadenas son diferentes; es por eso que primero tenemos que hacer esta conversión, para que así posteriormente se puedan comparar.

Un ejemplo de lo mencionado anteriormente es el siguiente:

Si ejecutamos ese código veremos algo como esto:

imagen-4En la comparación de la cadena 1 con respecto a la 2 nos arroja el valor de -1, lo que quiere decir que va antes, esto es porque en el código ascii la letra ‘H’ esta en el lugar 72 y la ‘h’ en lugar 104, por lo tanto primero va el “HOla” y después el “hoLA”.

Pero lo que se quiere aquí es que no nos importen las mayúsculas ni las minúsculas, sino solo compararlas sin tomar en cuenta eso, es decir, queremos que si por ejemplo comparamos las cadenas del ejemplo anterior obtengamos el valor de 0 (que nos diga que son iguales) porque en sí las dos dicen lo mismo pero escitas con caracteres diferentes.

Ejemplo

Entonces es por eso que utilizamos las funciones “tolower” o “toupper”; entonces ahora el código quedaría de la siguiente manera:

Y ahora los valores obtenidos serían estos:

imagen-5Ahora si da 0 porque ya se convirtió a mayúsculas y ahora ya no encuentra caracteres diferentes.

Finalmente con este código ya obtenemos lo que queremos, comparar cadenas sin importas mayúsculas ni minúsculas.

About Stacy

Estudiante de 17 años de Ingenieria Biomedica en CUCEI. Hablo 3 idiomas, inglés, francés y alemán.