Tengo un array de caracteres, p.e:
char texto[100];
Este tiene datos que tengo que parsear para sacar ciertos valores que me interesan.
Quiero hacer una función que me devuelva los substring que hay entre 2 delimitadores.
Si tengo está frase:
Hola, estoy es una prueba.
Si invoco la funcion conlos delimitadores "estoy" y "prueba", me devolvería: es una.
Si hay varias cadenas encerradas entre otros estoy y prueba, me los deolveria también.
Necesito, que me devuelva todas las ocurrencias posibles y el número de estas para luego poder manejarlas en mi programa.
Estoy pensando en como hacerlo pero estoy un poco duditativo. Dentro de la función, he pensado usar strstr para sacar los punteros a "estoy" y "prueba" y con estos datos operarar para sacar la cadena resultante. Pero no sé muy bien, como implementar la llamada la función, gestionar la memoria arrays estáticos o memoria dinámica que pueda manejar y como devolverlos, etc...
Así que me vendría bien que me dieseis ideas de como hacerlo, de cómo obtener, por ejemplo, un string de cadenas con cada ocurrencia y luego otra variable que me indique el nº de estas.
Código
Algo así tengo por ahora.. iré poniendo lo que se me ocurra. Cualquier sugerencia es bien recibida
char ** substring(const char *cadena, const char *inicio, const char *fin, int *num_ocurrencias);
Gracias adelantadas y perdón por el tocho
Lh: No hagas doble post, utiliza el botón modificar.
A ver que os parece esto:
Código
char **substring(const char *cad, const char *begin, const char *end, int *num_ocurrencias) { char *p, *q; char **ppc; int i = 0 , j = 0; for(;;i++) { if (p == NULL) break; if (q == NULL) break; for (j = 0; j < q-p; j++) ppc[i][j] = *(p + j); ppc[i][j] = '\0'; } i--; *num_ocurrencias = i; return ppc; }
Cuando invoco a la función:
Código
char **encontrados = NULL; int num_referencias = 0; encontrados = substring(el_texto, "Inicio", "Fin", &num_referencias); .... for (i = 0; i < num_referencias; i++) { }
Parece que funciona.
Un saludo