Resumen: saber si una cadena o letra está dentro de otra cadena en C; es decir, comprobar si una string en C tiene una substring en C.
Para saber si una cadena tiene otra cadena, letra o carácter usamos la función strstr
. No importa si comparamos con un carácter o con una cadena, veremos ejemplos para ambos casos.
Aunque suene un poco complejo o raro, vamos a comprobar si una cadena tiene otra cadena en C, utilizando el método strstr
presente dentro de strings.h
.
Ya sea una subcadena o un carácter, al final estaremos buscando una cadena dentro de otra cadena en C. Pero bueno, la grano.
Para saber si una string tiene una substring hacemos lo siguiente:
// Cuando no existe
if (strstr("parzibyte.me", "www") != NULL) {
printf("Existe www dentro de parzibyte.me\n");
} else {
printf("No existe www dentro deu parzibyte.me\n");
}
Basta con saber que strstr
devuelve un apuntador NULL
en caso de que la primer cadena (pajar) no tenga la segunda cadena (aguja).
En este caso www
no está dentro de parzibyte.me
así que devuelve NULL
y por lo tanto el programa indica que no existe.
Nota: en este caso lo hice al propósito, es decir, puse el ejemplo de que no exista la cadena en la otra cadena.
Ahora veamos cuando sí existe; voy a demostrar cómo se puede usando variables (ya que en el ejemplo anterior definimos las cadenas al invocar a la función).
Veamos el ejemplo:
// Cuando sí existe y usando variables
char *pajar = "Hola mundo";
char *aguja = "mundo";
if (strstr(pajar, aguja) != NULL) {
printf("Existe %s dentro de %s\n", aguja, pajar);
} else {
printf("No existe %s dentro de %s\n", aguja, pajar);
}
En este caso mundo
(la aguja) sí existe dentro de Hola mundo
(el pajar). Mientras recuerdes el orden de los argumentos todo irá bien.
Aunque un carácter y una cadena no son lo mismo (y de hecho las cadenas no existen en C pero esa es otra historia) podemos aplicar un truco.
Si queremos saber si una string tiene un char entonces convertimos el char a string y luego usamos strstr
.
Veamos el ejemplo:
char *nombre = "Luis Cabrera Benito";
// Saber si cadena tiene carácter
char caracter = 'L';
// Convertir a cadena
char caracterEnCadena[] = {caracter, '\0'};
// Después usamos strstr como lo hacemos siempre
// Buscar si "L" está en "Luis Cabrera Benito"
if (strstr(nombre, caracterEnCadena) != NULL) {
printf("Existe %s dentro de %s\n", caracterEnCadena, nombre);
} else {
printf("No existe %s dentro de %s\n", caracterEnCadena, nombre);
}
Después de hacer la conversión simplemente usamos strstr
.
Los 3 ejemplos están aquí, así como la importación de la librería (si lo queremos ver así):
/**
* Saber si cadena tiene subcadena (u otra cadena) en C
*
* @author parzibyte
* @see https://parzibyte.me/blog
* */#include <stdio.h>
#include <string.h>
int main(void) {
// Cuando no existe
if (strstr("parzibyte.me", "www") != NULL) {
printf("Existe www dentro de parzibyte.me\n");
} else {
printf("No existe www dentro deu parzibyte.me\n");
}
// Cuando sí existe y usando variables
char *pajar = "Hola mundo";
char *aguja = "mundo";
if (strstr(pajar, aguja) != NULL) {
printf("Existe %s dentro de %s\n", aguja, pajar);
} else {
printf("No existe %s dentro de %s\n", aguja, pajar);
}
char *nombre = "Luis Cabrera Benito";
// Saber si cadena tiene carácter
char caracter = 'L';
// Convertir a cadena
char caracterEnCadena[] = {caracter, '\0'};
// Después usamos strstr como lo hacemos siempre
// Buscar si "L" está en "Luis Cabrera Benito"
if (strstr(nombre, caracterEnCadena) != NULL) {
printf("Existe %s dentro de %s\n", caracterEnCadena, nombre);
} else {
printf("No existe %s dentro de %s\n", caracterEnCadena, nombre);
}
}
strings.h
, no olvides hacer el include
correspondiente.Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.