Te sugerimos que revises esta solución en un entorno controlado antes de enviarlo a producción, un saludo.
Solución:
http://www.cplusplus.com/reference/clibrary/cstring/strtok/
Eche un vistazo a esto y use caracteres de espacio en blanco como delimitador. Si necesitas más pistas, házmelo saber.
Desde el sitio web:
char * strtok ( char * str, const char * delimiters );
En una primera llamada, la función espera una C string como argumento para str, cuyo primer carácter se usa como ubicación inicial para buscar tokens. En llamadas posteriores, la función espera un null puntero y usa la posición justo después del final del último token como la nueva ubicación de inicio para escanear.
Una vez terminado null carácter de str se encuentra en una llamada a strtok, todas las llamadas posteriores a esta función (con un null puntero como primer argumento) devuelve un null puntero.
Parámetros
- calle
- C string para truncar
- Note que esto string se modifica al dividirse en cadenas más pequeñas (tokens). alternativamente [sic]un null se puede especificar un puntero, en cuyo caso la función continúa explorando donde finalizó una llamada exitosa anterior a la función.
- delimitadores
- C string que contiene los caracteres delimitadores.
- Estos pueden variar de una convocatoria a otra.
Valor de retorno
Un puntero al último token encontrado en string. UN null se devuelve el puntero si no quedan tokens para recuperar.
Ejemplo
/* strtok example */
#include
#include
int main ()
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string "%s" into tokens:n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
printf ("%sn",pch);
pch = strtok (NULL, " ,.-");
return 0;
Por diversión, aquí hay una implementación basada en el enfoque de devolución de llamada:
const char* find(const char* s,
const char* e,
int (*pred)(char))
while( s != e && !pred(*s) ) ++s;
return s;
void split_on_ws(const char* s,
const char* e,
void (*callback)(const char*, const char*))
const char* p = s;
while( s != e )
s = find(s, e, isspace);
callback(p, s);
p = s = find(s, e, isnotspace);
void handle_word(const char* s, const char* e)
// handle the word that starts at s and ends at e
int main()
split_on_ws(some_str, some_str + strlen(some_str), handle_word);
Recuerda que puedes recomendar esta división si te valió la pena.