Comprobar si una cadena contiene una subcadena en C

Jinku Hu 12 octubre 2023
  1. Utiliza la función str para comprobar si una cadena contiene una subcadena en C
  2. Utilice la función strcasestr para comprobar si una cadena contiene una subcadena
  3. Utilice la función strncpy para copiar una subcadena
Comprobar si una cadena contiene una subcadena en C

Este artículo explicará varios métodos para comprobar si una cadena contiene una subcadena dada en C.

Utiliza la función str para comprobar si una cadena contiene una subcadena en C

La función str es parte de las facilidades de la biblioteca estándar de C para cadenas, y está definida en la cabecera <string.h>. La función toma dos argumentos de puntero char, el primero denota la cadena a buscar y el otro denota la cadena a buscar. Encuentra la primera dirección inicial de la subcadena dada y devuelve el puntero correspondiente a char. Si la subcadena no se encuentra en la primera cadena argumentada, se devuelve el puntero NULL.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strstr(tmp, "literal");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Producción :

found substring at address 0x55edd2ecc014

Utilice la función strcasestr para comprobar si una cadena contiene una subcadena

La función strcasestr no forma parte de las funciones de la biblioteca estándar, sino que está implementada como una extensión en la biblioteca de C de GNU, que puede indicarse con la definición de la macro _GNU_SOURCE. Una vez definida, podemos llamar a la función strcasestr para encontrar la primera ocurrencia de la subcadena dada. Sin embargo, esta función ignora el caso de ambas cadenas.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strcasestr(tmp, "LITERAL");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Producción :

found substring at address 0x55edd2ecc014

Utilice la función strncpy para copiar una subcadena

Alternativamente, se puede copiar la subcadena dada a un nuevo buffer usando la función strncpy. Toma tres argumentos, el primero de los cuales es el puntero char de destino donde se almacenará la subcadena copiada. El segundo argumento es la cadena de origen, y el último argumento denota el primer número de bytes a copiar como máximo. Ten en cuenta que si el byte nulo no se encuentra en los primeros bytes de la cadena de origen, la cadena de destino no tendrá terminación nula.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

Producción :

This
string lit
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