Messaggioda eugenio.amitrano » 01/07/2006, 16:56

Ecco fatto!
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
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 346 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda eugenio.amitrano » 01/07/2006, 17:04

Purtroppo il mio tempo e' scaduto.
Mia moglie mia figlia mi attendono per uscire.
Domani leggero i commenti.
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 347 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda Kroldar » 01/07/2006, 19:08

eugenio sinceramente se dovessi creare un programma che elimina un carattere da una stringa userei una nota funzione di nome "strtok"... credo si faccia molto prima... no?
Kroldar
Advanced Member
Advanced Member
 
Messaggio: 460 di 2110
Iscritto il: 11/11/2005, 16:23

Messaggioda eugenio.amitrano » 02/07/2006, 11:09

Certo che potevo, ma non l'ho fatto per 2 motivi, e cioe' che lo scopo di questo programma era puramente didattico e che ho la filosofia di non legare le funzioni ad altre librerie per una questione di compatibilita' e leggibilita'.

L'utilizzo di strtok rendeva la funzione meno leggibile e meno adatta al suo scopo didattico.
Concordi ?

Grazie lo stesso del consiglio, e vorrei anche dire che gli interventi come i tuoi, grucho, lorven, gigi, sono cio' che rendono piu' interessante una discussione informatica e migliorano la conoscenza e la comprensione di ogniuno di noi.
Inoltre, una medaglia d'oro a stellacometa al valor di colei che genero' il caos.

Complimenti a tutti,
a presto,
Eugenio
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 348 di 1375
Iscritto il: 15/02/2006, 16:16

Messaggioda stellacometa2003 » 02/07/2006, 11:53

eugenio.amitrano ha scritto:Inoltre, una medaglia d'oro a stellacometa al valor di colei che genero' il caos.

Complimenti a tutti,
a presto,
Eugenio


:-D :-D E credimi...il caos con me nelle vicinanze non finirà mai in questa sezione del forum!!! :lol:
eheheeh Grazie a tutti del prezioso aiuto che mi state offrendo, grazie di cuore!!! :wink:

@ Eugenio
Ho visto il codice che ti avevo chiesto di spiegarmi...Grazie, più tardi lo studio meglio e ti posto le parti che meno capisco, che ci sono sicuramente! :D
Avatar utente
stellacometa2003
Senior Member
Senior Member
 
Messaggio: 1516 di 1844
Iscritto il: 03/10/2005, 21:11
Località: Cinisi (PA)

Messaggioda Kroldar » 02/07/2006, 12:05

eugenio.amitrano ha scritto:Certo che potevo, ma non l'ho fatto per 2 motivi, e cioe' che lo scopo di questo programma era puramente didattico e che ho la filosofia di non legare le funzioni ad altre librerie per una questione di compatibilita' e leggibilita'.

L'utilizzo di strtok rendeva la funzione meno leggibile e meno adatta al suo scopo didattico.
Concordi ?

Certo concordo in pieno. Uno degli aspetti più interessanti, a mio avviso, della programmazione è che non esiste un unico modo per ottenere lo stesso risultato... è come scrivere un testo: lo scopo è comunicare... e ci sono infiniti modi e stili diversi per farlo.
Kroldar
Advanced Member
Advanced Member
 
Messaggio: 461 di 2110
Iscritto il: 11/11/2005, 16:23

Messaggioda eugenio.amitrano » 02/07/2006, 15:19

Kroldar ha scritto:Certo concordo in pieno. Uno degli aspetti più interessanti, a mio avviso, della programmazione è che non esiste un unico modo per ottenere lo stesso risultato... è come scrivere un testo: lo scopo è comunicare... e ci sono infiniti modi e stili diversi per farlo.

Non potevi usare parole migliori per trasmettere questo messaggio.

stellacometa2003 ha scritto: E credimi...il caos con me nelle vicinanze non finirà mai in questa sezione del forum!!!
eheheeh

Ne sono sicuro, ehhee..

A presto,
Eugenio
Avatar utente
eugenio.amitrano
Senior Member
Senior Member
 
Messaggio: 351 di 1375
Iscritto il: 15/02/2006, 16:16

Precedente

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite