Saltar al contenido

Separar string en C cada espacio en blanco

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *