En muchas ocasiones es necesario comparar cadenas de caracteres para determinar si son iguales o si hay diferencia. En este artículo analizaremos la función “strcmp” y sus derivados, cómo utilizarla y algunos ejemplospara que sea más fácil su comprensión.
Cabe señalar que para el uso de las siguientes funciones es necesario incluir la librería “string.h”
strcmp: Función que sirve para comparar dos cadenas de caracteres, si las cadenas son iguales te devolverá un “0”, si la primer cadena es menor que la segunda devolverá un número negativo y finalmente si la primer cadena es mayor que la segunda devolverá un numero positivo. La sintaxis para utilizar la función es la siguiente:
Código:
strcmp(cadena1, cadena2); |
---|
¿Cómo determina cual cadena es mayor o menor? Pues bien, el sistema ASCII determina que cada caracter tiene un valor numérico (binario, decimal, hexadecimal), lo que hace más fácil que se pueda comparar. La función trabaja de la siguiente manera: Compara (Resta) carácter por carácter de la primer cadena a la segunda cadena, en cuanto detecta una diferencia de caracteres (Es decir, la resta no sea 0) detiene la operación, y devuelve un numero positivo o negativo.
Esta función tiene como característica principal que sí reconoce diferencias entre letras mayúsculas y minúsculas, por lo tanto, si comparamos “Juan” con “juan”, las cadenas serán diferentes.
strncmp: Tiene la misma función que “strcmp”, comparar dos cadenas de caracteres y determinar si son iguales, con la única diferencia de que a esta función se le especifica una cantidad de caracteres a comparar. La sintaxis para utilizar la función es la siguiente:
Código:
strncmp(cadena1, cadena2, numero); |
---|
Donde “numero” es la cantidad de caracteres que queremos comparar. Por ejemplo, si tenemos la primer cadena con el valor “Comprar comida” y la segunda cadena con el valor “Comprar juego”, y le decimos que solo compare los primeros 7 caracteres, solo comparará “Comprar” y nos devolverá que las cadenas son iguales. Esta función también es sensible a mayúsculas y minúsculas.
stricmp: Función que sirve para comparar dos cadenas de caracteres, devolviendo un valor de 0 si son iguales. La característica principal de esta función es que NO es sensible ante mayúsculas y minúsculas, por ejemplo, no encontrará diferencia entre “Carlos” y “carlos”. La sintaxis para utilizar la función es la siguiente:
Código:
stricmp(cadena1, cadena2); |
---|
strnicmp: Tiene la misma función que “stricmp”, comparar dos cadenas de caracteres y determinar si son iguales sin ser sensibles a mayúsculas y minúsculas, con la única diferencia de que a esta función se le especifica una cantidad de caracteres a comparar. La sintaxis para utilizar la función es la siguiente:
Código:
stricmp(cadena1, cadena2, numero); |
---|
Donde “numero” es la cantidad de caracteres que queremos comparar. Por ejemplo, si tenemos la primer cadena con el valor “Jugar futbol” y la segunda cadena con el valor “jugar básquetbol”, y le decimos que solo compare los primeros 5 caracteres, solo comparará “Jugar” y nos devolverá que las cadenas son iguales, pues tampoco es sensible a mayúsculas o minúsculas.
Ejercicio 1: Realizar un programa donde el usuario pueda ingresar dos cadenas de caracteres (limitado a 20 caracteres) y posteriormente compararlas para determinar si son iguales o no utilizando la función strcmp.
Código:
/* Ejemplo de uso de función "strcmp" - Por Solución Ingenieril*/ #include <stdio.h> /* Declaración librerías*/ #include <stdlib.h> #include <string.h> int main() { char cadena1[20]=""; //Declaramos nuestras cadenas con límite de caracteres char cadena2[20]=""; printf("Introduce la primer cadena: "); fgets(cadena1, 20, stdin); //Capturamos la primer cadena printf("\n"); printf("Introduce la segunda cadena: "); fgets(cadena2, 20, stdin); //Capturamos la segunda cadena if(strcmp(cadena1, cadena2)==0) //Comparamos si cadena1 es igual a cadena2 printf("Son iguales"); else printf("No son iguales"); return 0; } |
---|
Ejercicio 2: Realizar un programa donde el usuario pueda ingresar dos cadenas de caracteres (limitado a 20 caracteres) y posteriormente compararlas para determinar si son iguales o no, utilizando la función strncmp e indicándole que solo compare los primeros 6 caracteres.
Código:
/* Ejemplo de uso de función "strncmp" - Por Solución Ingenieril*/ #include <stdio.h> /* Declaración librerías*/ #include <stdlib.h> #include <string.h> int main() { char cadena1[20]=""; //Declaramos nuestras cadenas con límite de caracteres char cadena2[20]=""; printf("Introduce la primer cadena: "); fgets(cadena1, 20, stdin); //Capturamos la primer cadena printf("\n"); printf("Introduce la segunda cadena: "); fgets(cadena2, 20, stdin); //Capturamos la segunda cadena if(strncmp(cadena1, cadena2, 6)==0) //Comparamos si los primeros 6 caracteres de cadena1 son iguales a cadena2 printf("Son iguales"); else printf("No son iguales"); return 0; } |
---|
Ejercicio 3: Realizar un programa donde el usuario pueda ingresar dos cadenas de caracteres (limitado a 20 caracteres) y posteriormente compararlas para determinar si son iguales o no, utilizando la función stricmp, sin importar si sean mayúsculas o minúsculas.
Código:
/* Ejemplo de uso de función "stricmp" - Por Solución Ingenieril*/ #include <stdio.h> /* Declaración librerías*/ #include <stdlib.h> #include <string.h> int main() { char cadena1[20]=""; //Declaramos nuestras cadenas con límite de caracteres char cadena2[20]=""; printf("Introduce la primer cadena: "); fgets(cadena1, 20, stdin); //Capturamos la primer cadena printf("\n"); printf("Introduce la segunda cadena: "); fgets(cadena2, 20, stdin); //Capturamos la segunda cadena if(stricmp(cadena1, cadena2)==0) //Comparamos si cadena1 es igual a cadena2, sin importar mayúsculas o minúsculas printf("Son iguales"); else printf("No son iguales"); return 0; } |
---|
Ejercicio 4: Realizar un programa donde el usuario pueda ingresar dos cadenas de caracteres (limitado a 20 caracteres) y posteriormente compararlas para determinar si son iguales o no utilizando la función strnicmp, indicándole que solo compare los primeros 6 caracteres y que no sea sensible a mayúsculas y minúsculas.
Código:
/* Ejemplo de uso de función "strnicmp" - Por Solución Ingenieril*/ #include <stdio.h> /* Declaración librerías*/ #include <stdlib.h> #include <string.h> int main() { char cadena1[20]=""; //Declaramos nuestras cadenas con límite de caracteres char cadena2[20]=""; printf("Introduce la primer cadena: "); fgets(cadena1, 20, stdin); //Capturamos la primer cadena printf("\n"); printf("Introduce la segunda cadena: "); fgets(cadena2, 20, stdin); //Capturamos la segunda cadena if(strnicmp(cadena1, cadena2, 6)==0) //Comparamos si los primeros 6 caracteres de cadena1 son iguales a cadena2, sin importar si sin mayúsculas o minúsculas printf("Son iguales"); else printf("No son iguales"); return 0; } |
---|
Ejercicio 1: Como podemos observar, con la función “strcmp” la cadena tiene que ser exactamente igual para que detecte que son iguales, si cambia algo, aunque sea que una letra sea mayúscula, detectará que no son iguales.
Ejercicio 2: Como podemos observar, en el primer caso detectó que eran iguales aunque toda la cadena no era igual, porque solamente comparó los primeros 6 caracteres con la función “strncmp”. En el segundo caso si detectó que la cadena era diferente, pues los primeros 6 caracteres son distintos.
Ejercicio 3: Notamos que, en el primer caso detectó que eran iguales pues la función “stricmp” no es sensible a mayúsculas y minúsculas. El segundo caso, al ser totalmente diferente, si detectó que no son iguales.
Ejercicio 4: Notamos que, en el primer caso detectó que eran iguales pues la función “strnicmp” no es sensible a mayúsculas y minúsculas y comparó solo los primeros 6 caracteres. El segundo caso, al cambiar la segunda palabra desde su primer caracter, detectó una diferencia.
Aprender a comparar cadenas de caracteres es algo fundamental en la programación, pues nos encontraremos con muchos programas que requerirán estas características. En este artículo analizamos 4 maneras distintas de comparar cadenas de caracteres y analizamos algunos ejercicios para saber cómo utilizarlas.
Muchas gracias por la información compartida, me ayudo a comprender mucho mejor la función strcmp(), saludos desde Lima - Perú