Comparar cadenas en C

Jinku Hu 12 octubre 2023
  1. Usa la función strcmp para comparar cadenas
  2. Utilice la función strncmp para comparar sólo ciertas partes de las cadenas
  3. Usar las funciones strcasecmp y strncasecmp para comparar cadenas ignorando el caso de las letras
Comparar cadenas en C

Este artículo introducirá múltiples métodos sobre cómo comparar cadenas en C.

Usa la función strcmp para comparar cadenas

La función strcmp es una función de la biblioteca estándar definida en la cabecera <string.h>. Las cadenas en C son sólo secuencias de caracteres terminadas por el símbolo \0, por lo que la función tendría que comparar cada carácter con iteración.

strcmp toma dos cadenas de caracteres y devuelve el número entero que denota el resultado de la comparación. El número devuelto es negativo si la primera cadena es lexicográficamente menor que la segunda, o positivo si la segunda es menor que la primera, o 0 si las dos cadenas son idénticas.

Observe que, en el siguiente ejemplo, invertimos el valor de retorno de la función y lo insertamos en la sentencia condicional ?: para imprimir la salida correspondiente en la consola.

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

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcmp(str1, str2) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  !strcmp(str1, str3) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Producción :

strings are not equal
strings are not equal

Utilice la función strncmp para comparar sólo ciertas partes de las cadenas

strncmp es otra función útil definida en la cabecera <string.h>, y puede ser utilizada para comparar sólo varios caracteres del principio de las cadenas.

strncmp toma el tercer argumento de tipo entero para especificar el número de caracteres a comparar en ambas cadenas. Los valores de retorno de la función son similares a los devueltos por strcmp.

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

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  !strncmp(str1, str2, 5) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Producción :

strings are equal

Usar las funciones strcasecmp y strncasecmp para comparar cadenas ignorando el caso de las letras

La función strcasecmp se comporta de forma similar a la función strcmp excepto que ignora el caso de las letras. Esta función es compatible con POSIX y puede utilizarse en varios sistemas operativos junto con strncasecmp, que implementa la comparación sin tener en cuenta las mayúsculas y minúsculas en el número determinado de caracteres de ambas cadenas. Este último parámetro puede pasarse a la función con el tercer argumento de tipo size_t.

Tenga en cuenta que los valores de retorno de estas funciones pueden utilizarse directamente en sentencias condicionales.

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

int main() {
  const char* str1 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcasecmp(str1, str3) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  !strncasecmp(str1, str3, 5) ? printf("strings are equal\n")
                              : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Producción :

strings are equal
strings are equal
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C String