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