Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Eliminare gli spazi da una stringa.
Forum - Pascal - Eliminare gli spazi da una stringa.

Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 11:02
Venerdì, 26/03/2010
Non riesco a trovare una soluzione per cancellare tutti gli spazi da una stringa data.
Io avevo pensato a un ragionamento di questo genere: intanto vedo attraverso un ciclo while se ci sono spazi all'inizio, e metto in una variabile k il numero del carattere da cui inizia la stringa che non sia uno spazio. Da lì parto con un ciclo for che va da k alla lunghezza della stringa e pongo la condizione che ogni volta che il carattere della stringa è uno spazio allora metto in una stringa di passaggio la copia della stringa iniziale che va da k a i-1.
E' un po' difficile da spiegare perciò vi posto il codice della funzione.
Codice sorgente - presumibilmente Delphi

  1. function SpaceEraser(s:string):string;
  2. var i,n,k:byte; stringa: string;
  3. begin
  4. stringa:= '';
  5. k:= 1;
  6. while s[k] = ' ' do
  7.    begin
  8.       k+=1;
  9.       ShowMessage(IntToStr(k));
  10.    end;
  11. n:=k;
  12. for i:=k to length(s)-1 do
  13.    begin
  14.       if s[i] = ' ' then
  15.          begin
  16.             stringa += copy(s,n,i-1);
  17.             n:=i+1;
  18.          end;
  19.    end;
  20.    SpaceEraser:= stringa;
  21. end;


Purtroppo non funziona completamente. Cioè il primo spazio riesce a cancellarmelo ma dal secondo in poi non funziona più.
Ad esempio de metto ciao ciao ciao mi restituisce ciaociao ciao
se metto asd dsa fdmns mi restituisce asddsa fdm

Non riesco a capire dov'è l'errore e come posso correggere! Help!

Grazie a tutti
Saluti

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 12:08
Venerdì, 26/03/2010
Risolto: Grazie mille a TheKaneB per la soluzione.
Bastava soltanto leggere ogni carattere e se esso non fosse uno spazio sarebbe stato copiato in una stringa di passaggio:
Codice sorgente - presumibilmente Delphi

  1. function EraseSpace(s:string):string;
  2. var i:byte; stringa:string;
  3. begin
  4. stringa:= '';
  5. for i:= 1 to length(s) do IF s[i] <> ' ' then stringa:= stringa + s[i];
  6. EraseSpace:= stringa;
  7. end;



grazie ancora:k:

PM Quote