/* 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;
}