Anteriormente en mi blog te enseñé cómo saber si una cadena en C contiene una subcadena. Ahora te mostraré cómo saber el índice (es decir, la posición) en donde aparece la subcadena dentro de la cadena.

Para esto vamos a usar strstr y operaciones con punteros.

Buscando cadena en subcadena

En mi tutorial anterior sobre ANSI C usamos strstr, misma que devuelve un apuntador a la cadena. Entonces primero debemos comprobar si se devuelve un puntero que no es NULL y en caso de ser así, vamos a hacer una resta para obtener el índice.

Obtener índice de subcadena en cadena usando C

Vamos al grano. El código queda así:

/*
    https://parzibyte.me/blog/
*/
#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    char texto[] = "Hola, mundo. Me llamo Luis y me gusta programar en PHP";
    char busqueda[] = "PHP";
    char *posiblePuntero = strstr(texto, busqueda);
    if (posiblePuntero != NULL)
    {
        int indice = posiblePuntero - texto;
        printf("La cadena '%s' contiene la subcadena '%s' en la posición %d", texto, busqueda, indice);
    }
    else
    {
        printf("La cadena '%s' NO contiene la subcadena '%s'", texto, busqueda);
    }
    return 0;
}

En la línea 11 obtenemos el posible apuntador a la subcadena que estamos buscando dentro de la cadena.

En caso de que lo encontremos, hacemos operaciones con los punteros en la línea 14 para saber la posición de la subcadena en la cadena.

Finalmente en cualquiera de los dos casos imprimimos los resultados. En mi caso lo ejecuté y la salida fue la siguiente:

ANSI C - Buscar índice de subcadena dentro de cadena con strstr

Ya con este índice podemos cortar la cadena, recorrerla desde ahí, etcétera.

También te invito a leer más sobre programación en C dentro de mi blog.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto