[Lugge] Re: 2° esercizio C

  • From: Matteo Ianeselli <ianezz@xxxxxxxxxx>
  • To: lugge@xxxxxxxxxxxxx
  • Date: Wed, 18 Jul 2001 17:54:59 +0200

Massimo Arnaudo, pigiando tasti a caso sul citofono, ha scritto:

 > /* inverti l' ordine dei caratteri della stirnga */
 > char reverse( char s[], int n)
 > {
 >      char input[n];
 >      int s1, n1;
 >      n1 = n;
 > 
 >      for (s1 = 0; s1 < n ; ++s1)
 >      {
 >              if (input[n1] == '\n')
 >              --n1;
 >              else 
 >              {
 >                      s[s1] = input[n1];
 >                      --n;
 >              }
 >      
 >      }
 >      return ;
 > }



1) stai usando un vettore `input[]' il cui contenuto non e`
   inizializzato in alcun modo. Proabilmente dovresti prima copiarci
   dentro la stringa.

2) se `n' e` la dimensione dell'array, al massimo puoi accedere
   all'elemento con indice n-1, altrimenti sfori. 

3) cosa succede se la stringa e` vuota (lunghezza 0)? 

4) hai dichiarato che la funzione ritorna un char, ma non ritorni
   nulla.

5) nelle intenzioni mi pare che tu voglia far fare a questa funzione
   qualcosa di piu` della semplice inversione: vuoi anche che elimini
   certi caratteri dalla fine ('\n', il newline). Ti suggerirei invece
   di scrivere funzioni che facciano una sola cosa alla volta, e solo
   quella.

6) se usi nomi significativi per le variabili e per i parametri delle
   funzioni, semplificherai notevolmente la vita a chi quel codice lo
   dovra` esaminare (e possibilmente anche a te stesso, visto che e`
   raro che qualcuno si ricordi per filo e per segno il funzionamento
   preciso di un qualcosa scritto tre giorni prima).

   Chiaro che e` un concetto che si capisce veramente nella sua
   essenza solo nel momento in cui si deve effettuare manutenzione di
   codice scritto da altri :-)

7) meglio nessun commento che un commento sbagliato. :-)


----------------------------------------------------------------------

Segue spoiler:

.
.
.
.
.
.
.
.
.
.
.
.
.
.

void
reverse(char string_value[], int string_length)
{
    int  start = 0;
    int  end   = string_length - 1;
    char temp;

    /* Scommenta se vuoi anche eliminare i \n finali */

    /* while(end >= 0 && string_value[end] == '\n')
     * {
     *     string_value[end] = '\0';
     *     end--;
     * }
     */

    while(start < end)
    {
         /* Scambia due caratteri */
         temp                = string_value[start];
         string_value[start] = string_value[end];
         string_value[end]   = temp;
        
         /* Passa alla prossima coppia da scambiare */
         start++;
         end --;
    }
}


-- 
UNIX diapers by Pannolini USPTO 2039887  http://www.uspto.gov
Matteo Ianeselli      ianezz AT sodalia.it  (+39) 0461 316452
Visita il LinuxTrent:            http://www.linuxtrent.it
<========----------
 Prima di scrivere in m-list per favore leggi il regolamento
 http://lugge.ziobudda.net/benvenuto.html



Other related posts: