Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/12/2012, 07:21
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Función recursiva + string

Si la idea es contar los caraceres puedes solucionarlo con un strchr y strrchr

Código:
char bff[] = "abcdefg";
char *ci = strchr(bff, 'b');
char *cf = strrchr(bff, 'f');
int t = (cf-bff)-(ci-bff+1);
Si la idea es practicar la recursividad, tendras que usar un flag de estado (bandera) para saber que ya estas dentro del rango objetivo; este flag deberá ser accesible y continuo deste todas las ejecuciones: o se envia como argumento o se deja como estatica global; ademas tendras que intercambiar posiciones de lectura: otro argumento con un incremental que indica la posicion de lectura, o si quieres ahorrarte este argumento deberas modificar el texto evaluado (tal como hace strtok). Te dejo un simple ejemplo:

Código:
int contar(char *bff, char ci, char cf, char inrange, int rp) {
    int t = 0;
    
    if(rp >= strlen(bff)) {
        return -1;
    }
    
    if(!inrange) {
        if(bff[rp] == ci) {
            inrange = 1;
        }
    }
    else {
        if(bff[rp] == cf) {
            inrange = 0;
        }
    }
    
    t += (inrange + contar(bff, ci, cf, inrange, ++rp));
    
    return t;
}

//la llamada se hace inicializando los flags de estado
int caracs = contar(buffer, 'b', 'd', 0, 0);
Tal como ves no puedes ahorrarte los flags de estado porque tendrias que evaluar todo el texto en cada ejecucion (no tendria sentido usar recursividad para escanear todo el texto en cada vuelta). Ten en cuenta que hay mas formas de plantear la solucion, esto es solo una idea rapida.

Saludos
vosk