Función que lee cada palabra en una cadena e imprime cada palabra en una línea diferente con C

Este es mi código hasta ahora, todavía tengo que averiguar cómo agregar '\0' al final de la cadena y avanzar al siguiente índice al principio de la siguiente palabra.

  * inputs: str - the string, * if str is NULL, return the index of the next word in the string * AND place a '\0' at the end of that word. */ int nextword(char *str) { // create two static variables - these stay around across calls static char *s; static int nextindex; int thisindex; // reset the static variables if (str != NULL) { s = str; thisindex = 0; // TODO: advance this index past any leading spaces while (s[thisindex]=='\n' || s[thisindex]=='\t' || s[thisindex]==' ' ) thisindex++; } else { // set the return value to be the nextindex thisindex = nextindex; } // if we aren't done with the string... if (thisindex != -1) { // TODO: two things // 1: place a '\0' after the current word // 2: advance nextindex to the beginning // of the next word } return thisindex; } 

Y quiero el siguiente código.

 char *str = "Welcome everybody! Today is a beautiful day\t\n"; int i = nextword(str); while(i != -1) { printf("%s\n",&(str[i])); i = nextword(NULL); } 

para dar salida

 Welcome everybody! Today is a beautiful day 

Realmente no entiendo por qué está pidiendo ayuda, cuando la acción requerida ya está contenida en su código:

  // TODO: two things // 1: place a '\0' after the current word // 2: advance nextindex to the beginning // of the next word 

Así que vamos a descomponerlo.

  1. Necesitas buscar a través de tu cadena hasta que encuentres un espacio. Ya tienes un bucle que hace lo contrario. Reemplaza el carácter que sigue a su palabra con un '\0' . Tenga cuidado de no correr más allá del final de su cadena.

  2. Creo que el número 2 no requiere explicación, excepto para decir que necesita asegurarse de que si se encuentra al final de la cadena de entrada (en el número 1 anterior), establezca nextindex en -1.