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.

Uso de strstr para saber si cadena tiene cadena en C

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.

Saber si cadena tiene subcadena en C

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.

Con variables

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.

Saber si carácter existe dentro de cadena en C

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.

Poniendo todo junto

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);
    }
}

Conclusión y apuntes

  • Esta función viene dentro de strings.h, no olvides hacer el include correspondiente.
  • La función trabaja tomando en cuenta mayúsculas y minúsculas
  • Si quieres comparar sin importar si son mayúsculas o minúsculas primero convierte ambas cadenas a la misma notación
  • También se puede saber el índice en donde la subcadena aparece usando operaciones con punteros.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.