strcmp en C: cómo comparar cadenas de manera correcta y evitar errores comunes

En el lenguaje C, ¿qué utilizas para comparar cadenas de caracteres? La función strcmp se usa para comprobar si dos cadenas son iguales, como si le preguntaras al programa: “¿Estas dos son iguales?”. Por supuesto, el programa no puede decidir si un gato o un perro es más adorable, pero al menos sí puede detectar la diferencia entre “HELLO” y “hello”. En este artículo explicaremos cómo funciona strcmp, cómo utilizarla y los errores más comunes que suelen cometerse.

1. ¿Qué es la función strcmp?

La función strcmp compara dos cadenas carácter por carácter y devuelve un valor entero como resultado. Su funcionamiento es el siguiente:

  • 0: si las cadenas son idénticas
  • Valor positivo: si la primera cadena aparece después en el orden alfabético
  • Valor negativo: si la primera cadena aparece antes en el orden alfabético

Esta función no solo sirve para comprobar si dos cadenas son iguales, sino también para determinar cuál va primero en orden alfabético. En un programa, puede usarse de la siguiente manera:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2);
    printf("Resultado de strcmp: %d\n", result);
    return 0;
}

Este código compara «Hello» y «World» y muestra el resultado. Un punto importante es que strcmp distingue entre mayúsculas y minúsculas, por lo que “HELLO” y “hello” se consideran diferentes.

2. Principio de funcionamiento de strcmp

El funcionamiento de strcmp es sencillo pero potente. Compara los caracteres de ambas cadenas uno a uno desde el inicio, y cuando encuentra una diferencia devuelve la diferencia entre esos caracteres. Este mecanismo también se aplica en comparaciones alfabéticas: por ejemplo, al comparar «apple» con «banana», strcmp compara primero «a» y «b», devolviendo un valor negativo.

Ejemplo de programa para entender mejor su funcionamiento:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("Las cadenas son iguales.\n");
    } else if (result < 0) {
        printf("str1 está antes que str2.\n");
    } else {
        printf("str1 está después que str2.\n");
    }

    return 0;
}

Este código compara «apple» con «banana». Como resultado, strcmp indica que «apple» está antes que «banana» en orden alfabético. Esto resulta muy útil al ordenar listas de cadenas.

3. Ejemplos de uso de strcmp

1. Verificación de entrada del usuario

strcmp es útil para comparar datos introducidos por el usuario con datos almacenados, como en la verificación de contraseñas.

#include <stdio.h>
#include <string.h>

int main() {
    char password[] = "secret";
    char input[256];

    printf("Introduce la contraseña: ");
    scanf("%s", input);

    if (strcmp(password, input) == 0) {
        printf("La contraseña es correcta.\n");
    } else {
        printf("Contraseña incorrecta.\n");
    }

    return 0;
}

Este programa compara la contraseña ingresada con la correcta mediante strcmp.

2. Orden alfabético

También se puede usar strcmp para ordenar cadenas en orden alfabético, determinando cuál debe ir primero en la lista.

4. Alternativas a strcmp

Aunque strcmp es muy útil, en algunos casos es mejor emplear otras funciones.

strncmp: comparación parcial de cadenas

strncmp permite comparar solo una parte de las cadenas, por ejemplo, los primeros 3 caracteres.

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "apricot";

    if (strncmp(str1, str2, 3) == 0) {
        printf("Los primeros 3 caracteres coinciden.\n");
    } else {
        printf("Los primeros 3 caracteres no coinciden.\n");
    }

    return 0;
}

memcmp: comparación de memoria

memcmp compara bloques de memoria completos, lo que resulta útil al trabajar con datos binarios.

5. Errores comunes

1. Ignorar la diferencia entre mayúsculas y minúsculas

strcmp distingue entre mayúsculas y minúsculas. Por ejemplo, «HELLO» y «hello» se consideran diferentes. Si necesitas una comparación que ignore el caso, usa strcasecmp.

2. Comparar punteros NULL

Usar strcmp con punteros NULL provoca fallos. Es fundamental asegurarse de que las cadenas estén correctamente inicializadas antes de compararlas.

Conclusión

strcmp es una función clave en C para comparar cadenas de texto de manera sencilla. Ya sea para verificar contraseñas o para ordenar cadenas en orden alfabético, resulta muy práctica. Comprender su funcionamiento y limitaciones es esencial para evitar errores y aprovechar todo su potencial en tus programas en C.

年収訴求