Oppure

Loading
26/03/10 10:02
a_butta
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.
function SpaceEraser(s:string):string;
var i,n,k:byte; stringa: string;
begin
stringa:= '';
k:= 1;
while s[k] = ' ' do
   begin
      k+=1;
      ShowMessage(IntToStr(k));
   end;
n:=k;
for i:=k to length(s)-1 do
   begin
      if s[i] = ' ' then
         begin
            stringa += copy(s,n,i-1);
            n:=i+1;
         end;
   end;
   SpaceEraser:= stringa;
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
aaa
26/03/10 11:08
a_butta
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:
function EraseSpace(s:string):string;
var i:byte; stringa:string;
begin
stringa:= '';
for i:= 1 to length(s) do IF s[i] <> ' ' then stringa:= stringa + s[i];
EraseSpace:= stringa;
end;


grazie ancora:k:
aaa