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.