A dire il vero, trim() non servirebbe neanche se si ragionasse a "stati" in modo da saltare più spazi. Basta che tieni una variabile es. inizioParola che se è -1 vuol dire che non sei in una parola, se >= 0 sei in una parola. All'inizio ovviamente vale -1.
Se inizioParola è -1 E trovi un non-spazio, hai l'inizio della parola, aggiorni inizioParola e continui con il prossimo carattere.
Se inizioParola non è -1 E trovi uno spazio hai la fine della parola, prendi la parola e rimetti inizioParola a -1 e continui ecc...
Questo ti permette di ignorare più spazi, perché se inizioParola è -1 e trovi spazio, semplicemente non fai niente ... non devi neanche gestire questo caso .... ma solo i due punti sopra.