2002 – 4

Il vettore c contiene una stringa di n caratteri, alcuni dei quali sono spazi.

La seguente funzione deve calcolare e restituire il numero di parole contenute nella stringa (una parola è una sequenza di caratteri consecutivi diversi da spazio che non si possa estendere né a sinistra né a destra mantenendo questa proprietà).
Si assuma che il primo carattere del vettore non sia spazio.

int contaParole(char c[], int n)
{
   int i, j = 0;
   for (i=0; i < n-1; i++)
      if ((c[i] != ' ') && (c[i+1] == ' ')) 
         j++;
   return j;
}

Purtroppo il programma contiene un errore che provoca una risposta sbagliata in uno dei seguenti casi:

  1. Il programma non funziona se l'input contiene solo spazi.
  2. Il programma non funziona se la stringa è vuota (cioè, se non contiene caratteri).
  3. Il programma non funziona se la stringa non termina con uno spazio.
  4. Il programma non funziona se la stringa termina con uno spazio.

Soluzione: c (Il programma non funziona se la stringa non termina con uno spazio.)


La funzione conteggia una nuova parola ogni volta che trova uno spazio preceduto da un carattere diverso da spazio.
L'ultima parola non viene conteggiata perché manca l'ultimo spazio...