La complicazione è più apparente che reale, si tratta giusto di cercare sul tuo libro un po' di cose. in particolare:
1) come funziona fgets() (che è in stdio.h)
2) cos'è un puntatore
3) come funzionano gli operatori di incremento e decremento (++ e --)
3) cosa significa "incrementare un puntatore"
4) come funzionano putchar() (che è in stdio.h) e isspace() (che è in ctype.h)
5) come funziona l'operatore ternario ?:
#include <stdio.h>
#include <ctype.h>
int main() {
char frase[1024]; // un vettore di 1024 char, usati come buffer
char *p = frase; // un puntatore a char, inizializzato per puntare a frase
fgets( frase, 1024, stdin ); // libreria standard: preleva una stringa da
// uno stream (in questo caso stdin) e la
// immette nel vettore frase; il limite della
// stringa ottenibile e' di 1023 caratteri
while( *p ) { // fintanto che il puntatore non punta a '\0', cioe' fintanto
// che non si arriva alla fine della stringa immessa nel
// vettore da fgets()...
putchar( !isspace(*p++) ? '*' : '\n' );
// in quest'ultima riga trovi, condensate:
// 1) una chiamata alla funzione di libreria isspace(), che serve a
// verificare se un determinato carattere e' o non e' uno spazio;
// 2) l'uso dell'operatore ternario ?: (cerca sul tuo libro, che c'e'
// di sicuro ed non e' cosi' complicato come sembra)
// il senso complessivo e' "se' p non punta, nel vettore frase, a un
// carattere spaziatore, chiama putchar() con '*', altrimenti chiama
// putchar() con '\n'"
// nota che il puntatore p viene incrementato di una posizione con '++',
// il che fa si' che dopo la verifica del suo contenuto punti al
// carattere successivo, pronto per la prossima ripetizione del ciclo
}
return 0;
}
Volendo toglierti dai piedi un po' di cose, se per te sono nuove, puoi scrivere la stessa cosa senza usare i puntatori, così:
#include <stdio.h>
#include <ctype.h>
int main() {
char frase[1024];
int i;
fgets( frase, 1024, stdin );
for( i=0; frase[i]; i++ ) {
putchar( !isspace(frase[i]) ? '*' : '\n' );
}
return 0;
}
Diventa ancor più lineare se eliminiamo l'operatore ternario, sostituendolo con un comune if:
#include <stdio.h>
#include <ctype.h>
int main() {
char frase[1024];
int i;
fgets( frase, 1024, stdin );
for( i=0; frase[i]; i++ ) {
if( !isspace(frase[i]) )
putchar( '*' );
else putchar( '\n' );
}
return 0;
}
Le tre versioni, sostanzialmente, fanno la stessa cosa.
P.S. Anch'io sono un hobbista, per cui sei in buona compagnia.