Ho preparato un programmino a volo e l'ho compilato.
- Codice:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
// lunghezza massima della stringa
#define MAX 81
// Carattere spazio
#define SPACE ' '
// Carattere di fine stringa
#define NIL '\0'
// prototipo della funzione
void eliminaspazi(char *);
void main(void)
{
char stringa[MAX];
clrscr();
printf("Immettere una stringa (max.80 caratteri):\n");
gets(stringa);
eliminaspazi(stringa);
printf("\n\n Stringa senza spazi:\n%s", stringa);
getch();
}
void eliminaspazi(char * buffer)
{
int i, j;
for(i = 0; buffer[i] != NIL; i++)
if(buffer[i] == SPACE)
{
// se trovo uno spazio eseguo lo shift
// a sinistra di tutti i caratteri successivi
// compreso il NIL
for(j = i + 1; buffer[j-1] != NIL; j++)
buffer[j - 1] = buffer[j];
}
}
Non guardare il fatto che ho usato printf invece di cout, per le cose veloci mi trovo piu' comodo.
Quello che volevo farti notare e' questo:
il parametro buffer della funzione eliminaspazi e' un puntatore a carattere,
cioe' punta ad una variabile stringa. Questo significa che quando modifico
i dati del puntatore, modifico direttamente i dati della variabile a cui sta puntando.
Nel nostro caso, quando richiamo la funzione eliminaspazi nel main passando come parametro la variabile "stringa", e' come se avessi detto a buffer di puntare a stringa.
Se il parametro di eliminaspazi fosse stato char buffer[MAX], quando richiamo la funzione nel main, sccede che copio il contenuto di stringa in buffer, e tutte le modifiche eseguo su buffer nella funzione rimangono li.
Cioe' buffer sara' la stringa senza spazi e stringa rimane invariata.
Ok ?
Eugenio