/* 060208-4.c
* 15 min
*/
#include <stdio.h>
int stridx (int c, char str[]);
int strridx (int c, char str[]);
char str1 [] = "Hola rapaz";
int main (void)
{
int res;
printf ("Cadena: %s\n", str1);
res = stridx ('H', str1);
if (res < 0) printf ("H: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = stridx ('h', str1);
if (res < 0) printf ("h: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = stridx ('a', str1);
if (res < 0) printf ("a: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = stridx ('z', str1);
if (res < 0) printf ("z: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = strridx ('H', str1);
if (res < 0) printf ("H: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = strridx ('h', str1);
if (res < 0) printf ("h: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = strridx ('a', str1);
if (res < 0) printf ("a: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
res = strridx ('z', str1);
if (res < 0) printf ("z: no se encuentra\n");
else printf ("Posición: %d (%c)\n", res, str1 [res]);
return 0;
}
/* Buscar la primera ocurrencia del carácter c en la cadena str
* Algoritmo 2:
* - Para todo carácter str[i] de la cadena str
* + Si str [i] es el carácter c devolver i
* - Devolver -1
*/
int stridx (int c, char str[])
{
int i;
for (i = 0; str[i] != '\0'; i++)
if (str[i] == c)
return i;
return -1;
}
/* Buscar la última ocurrencia del carácter c en la cadena str
* Algoritmo 1:
* - Buscar el terminador de cadena '\0' recorriéndola con un contador i
* - Recorriéndola en sentido inverso, buscar el carácter c
* + Si se encuentra devolver inmediatamente la posición
* + Si no se encuentra en toda la cadena devolver -1
*/
int strridx (int c, char str[])
{
int i;
for (i = 0; str[i] != '\0'; i++);
for (; i >= 0; i--)
if (str[i] == c)
return i;
return -1;
}
/* Buscar la última ocurrencia del carácter c en la cadena str
* Algoritmo 2:
* - Inicializar res, posición de c en str, a -1 (no se encuentra)
* - Para todo carácter str[i] de la cadena str
* + Si str [i] es el carácter c guardar la posición i en res
* - Devolver res (última ocurrencia)
*/
int strridx1 (int c, char str[])
{
int i, res;
res = -1;
for (i = 0; str[i] != '\0'; i++);
if (str[i] == c)
res = i;
return -1;
}