Lenguaje de programación C

Posición de carácter (letra) en cadena de C

En este corto post de programación en C vamos a ver cómo encontrar el índice y último índice de un carácter en C, o dicho de otra manera, la primera y última aparición de una letra en una cadena de C.

Ya sabemos que en C no existen las cadenas como tal y que tenemos arreglos de caracteres, pero aquí llamaremos “cadenas” o “strings” a esos arrays de tipo char.

Entonces veamos cómo saber la primera y última aparición de un char en una cadena de C.

Explicación del algoritmo

Para saber en cuál posición se encuentra un carácter dentro de una cadena de C simplemente recorremos la cadena desde el 0 hasta la longitud de la misma menos 1, y comprobamos si el char actual es el que buscamos.

Si es que encontramos el carácter entonces devolvemos el índice (y dejamos de recorrer la cadena) o posición en donde lo encontramos.

Por otro lado, si queremos saber la última aparición hacemos lo mismo pero ahora recorremos desde el final hacia el principio.

Primer ocurrencia de carácter en cadena usando C

El código para encontrar el primer índice que coincide con el carácter buscado en una cadena es el siguiente:

int indiceDeCaracterEnCadena(char *cadena, char caracter)
{
    int indice = 0;
    while (cadena[indice] != '\0')
    {
        char actual = cadena[indice];
        if (actual == caracter)
        {
            return indice;
        }
        indice++;
    }
    return -1;
}

En caso de que la letra no se encuentre dentro de la cadena entonces la función devolverá un -1 (lo mismo aplica para la función de C que devuelve la última posición de un carácter dentro de una cadena).

Última ocurrencia de carácter en cadena de C

Ahora veamos cómo saber la última posición o índice de una letra dentro de un string de C. Como lo dije, ahora vamos desde el final al inicio.

En este caso estoy usando strlen para calcular la longitud de la cadena, pero podemos calcular la longitud manualmente si así se requiere.

int ultimoIndiceDeCaracterEnCadena(char *cadena, char caracter)
{
    int indice = strlen(cadena) - 1;
    while (indice >= 0)
    {
        char actual = cadena[indice];
        if (actual == caracter)
        {
            return indice;
        }
        indice--;
    }
    return -1;
}

Poniendo todo junto

Ahora veamos un ejemplo y el código completo. En este caso simplemente voy a imprimir las posiciones en donde la letra aparece por primera vez y en donde aparece por última vez.

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

int indiceDeCaracterEnCadena(char *cadena, char caracter)
{
    int indice = 0;
    while (cadena[indice] != '\0')
    {
        char actual = cadena[indice];
        if (actual == caracter)
        {
            return indice;
        }
        indice++;
    }
    return -1;
}

int ultimoIndiceDeCaracterEnCadena(char *cadena, char caracter)
{
    int indice = strlen(cadena) - 1;
    while (indice >= 0)
    {
        char actual = cadena[indice];
        if (actual == caracter)
        {
            return indice;
        }
        indice--;
    }
    return -1;
}

int main()
{
    char cadena[] = "Hola, me llamo Parzibyte";
    char busqueda = 'o';
    printf("%d y %d", indiceDeCaracterEnCadena(cadena, busqueda), ultimoIndiceDeCaracterEnCadena(cadena, busqueda));
}

Ahora compilo con:

gcc ocurrencias.c -o ocurrencias.exe

Y ejecuto con:

./ocurrencias.exe

La salida es:

1 y 13

Cosa que es correcta, ya que la primer ocurrencia de la letra es en la segunda posición (índice 1, ya que se cuenta desde el cero) y la última es en el índice 13.

Aunque no se vea al principio, estas funciones nos van a servir para varias cosas, por ejemplo para saber si una letra solo se encuentra una sola vez dentro de la cadena (ya que si el primer y último índice son los mismos entonces el char solo se encuentra una vez).

Para terminar te dejo con más tutoriales de C en mi blog.

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

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

4 días hace

Esta web usa cookies.