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
aes menor que el deb - 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
== 0para 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
- strlen, strcpy, strcat
- strcmp y comparación
- strtok y tokenización
- memcpy y memset