/*stringhe.cpp*/

/* Tre versioni della funzione di copia di una stringa */

void copia1 (char *dest, char *sorg)
{
int i;
// Copia fino al terminatore della stringa sorgente
for ( i = 0; sorg[i] != '\0'; i++ )
dest[i] = sorg[i];
// Copia esplicita del terminatore, in quanto il ciclo è terminato troppo presto
dest[i] = '\0';
}

void copia2 (char *dest, char *sorg)
{
// Come sopra, avanzando direttamente i puntatori invece di un indice numerico
while ( *sorg != '\0' )
*(dest++) = *(sorg++);
// Copia esplicita del terminatore, in quanto il ciclo è terminato troppo presto
*dest = '\0';
}

void copia3 (char *dest, char *sorg)
{
// Come sopra, integrando la copia nella condizione d'uscita
// il confronto con '\0' è stato eliminato in quanto superfluo
while ( (*(sorg++) = *(dest++)) );
}

/* Confronto fra stringhe */

int uguali (char *a, char *b)
{
int i;
// Avanza i finché non si incontra una differenza o il termine della prima stringa
for ( i = 0; a[i] && a[i] == b[i]; i++ );
// restituisce il valore del confronto fra i caratteri alla posizione i
// (se i>0, i caratteri precedenti erano sicuramente uguali)
return a[i] == b[i];
}