0Pricing
C Academy · Lección

strcmp y comparación

Compare strings

strcmp y comparación es una lección gratuita de C Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Comparación de cadenas

No puede comparar cadenas con == en C. Eso solo compara las direcciones de dos matrices, no su contenido.

Use strcmp(a, b) de <string.h> para compararlas carácter por carácter.

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

int main(void) {
    char a[] = "apple";
    char b[] = "apple";
    if (strcmp(a, b) == 0)
        printf("Strings are equal\n");
    return 0;
}

Qué devuelve strcmp

strcmp devuelve un int:

  • 0 si las cadenas son iguales
  • un valor negativo si el primer carácter diferente de a es menor que el de b
  • un valor positivo en los demás casos
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("abc", "abc"));
    printf("%d\n", strcmp("abc", "abd"));
    printf("%d\n", strcmp("abd", "abc"));
    return 0;
}

La trampa de que cero significa igual

Un error frecuente es escribir if (strcmp(a, b)) esperando que signifique que son iguales.

Recuerde que strcmp devuelve 0 (falso) cuando son iguales, por lo que esa condición es verdadera cuando difieren. Compare siempre explícitamente con 0.

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

int main(void) {
    char input[] = "yes";
    if (strcmp(input, "yes") == 0)
        printf("Confirmed\n");
    else
        printf("Not confirmed\n");
    return 0;
}

Cómo funciona la comparación

strcmp compara los valores ASCII (de los bytes) de los caracteres, uno a uno, hasta que son diferentes o se alcanza un terminador.

Las letras mayúsculas (A=65) aparecen antes que las minúsculas (a=97), por lo que "Zebra" se ordena antes que "apple".

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

int main(void) {
    printf("%d\n", strcmp("Zebra", "apple"));
    return 0;
}

Orden lexicográfico

El signo del resultado de strcmp permite ordenar cadenas alfabéticamente. Un resultado negativo significa que el primer argumento aparece antes en el orden de diccionario.

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

int main(void) {
    const char *x = "banana";
    const char *y = "cherry";
    if (strcmp(x, y) < 0)
        printf("%s comes before %s\n", x, y);
    return 0;
}

strncmp: comparación limitada

strncmp(a, b, n) compara como máximo n caracteres. Resulta útil para comprobar prefijos.

Por ejemplo, para comprobar si una cadena comienza por "http".

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

int main(void) {
    char url[] = "https://site.com";
    if (strncmp(url, "https", 5) == 0)
        printf("Secure URL\n");
    return 0;
}

Comparación sin distinguir mayúsculas y minúsculas

El strcmp estándar distingue entre mayúsculas y minúsculas. Para ignorar esta diferencia, puede convertir los caracteres con tolower de <ctype.h> mientras compara.

(Los sistemas POSIX también ofrecen strcasecmp, pero no forma parte del estándar de C).

#include <stdio.h>
#include <ctype.h>

int ci_cmp(const char *a, const char *b) {
    while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
    return tolower(*a) - tolower(*b);
}

int main(void) {
    printf("%d\n", ci_cmp("Hello", "hello"));
    return 0;
}

Búsqueda mediante comparación

Puede recorrer una matriz de cadenas y usar strcmp para encontrar una coincidencia, como en una tabla de búsqueda sencilla.

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

int main(void) {
    const char *fruits[] = {"apple", "banana", "cherry"};
    const char *target = "banana";
    for (int i = 0; i < 3; i++) {
        if (strcmp(fruits[i], target) == 0) {
            printf("Found at index %d\n", i);
        }
    }
    return 0;
}

Ordenación de cadenas

Usando strcmp como motor, puede ordenar matrices de cadenas. Este es un pequeño algoritmo de ordenación de burbuja que intercambia punteros según el orden.

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

int main(void) {
    const char *names[] = {"Carol", "Alice", "Bob"};
    int n = 3;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (strcmp(names[j], names[j+1]) > 0) {
                const char *t = names[j];
                names[j] = names[j+1];
                names[j+1] = t;
            }
    for (int i = 0; i < n; i++) printf("%s\n", names[i]);
    return 0;
}

No compare directamente mediante restas

Podría intentar escribir su propia comparación con a[i] - b[i], pero con valores char sin procesar, el comportamiento del signo depende de la implementación y puede producir un desbordamiento.

Prefiera la función de biblioteca strcmp, que gestiona correctamente estos casos límite.

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

int main(void) {
    int r = strcmp("file1", "file2");
    printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
    return 0;
}

Comparación de entradas del usuario

Un uso práctico consiste en comprobar una contraseña o una opción de menú. Lea la entrada y compárela con los valores esperados mediante strcmp.

Compare siempre con 0 para comprobar la igualdad.

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

int main(void) {
    char choice[] = "quit";
    if (strcmp(choice, "quit") == 0)
        printf("Exiting program\n");
    return 0;
}

Comprobación rápida

Compruebe cuánto entiende sobre los valores de retorno de strcmp.

Repaso

Ha aprendido a comparar cadenas en C:

  • strcmp devuelve 0 si son iguales, y un valor negativo o positivo para indicar el orden.
  • No use nunca == con cadenas; compara direcciones.
  • Compruebe siempre == 0 para verificar la igualdad (la trampa de que cero es falso).
  • strncmp compara un prefijo; para ignorar mayúsculas y minúsculas necesita tolower.

Preguntas frecuentes

¿La lección «strcmp y comparación» es gratis?

Sí — el texto completo de «strcmp y comparación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «strcmp y comparación»?

Compare strings Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «strcmp y comparación»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. strlen, strcpy, strcat
  2. strcmp y comparación
  3. strtok y tokenización
  4. memcpy y memset
← Volver a C Academy