Hledám funkci explode pro delphi. Nemáte někdo? Taky by se mi hodil BubbleSort, případně QuickSort. Do komentářů. Dik.
RSS feed komentářů k tomuto článku
QuickSort
var A:Array[0..33] // arrayka s cislama
I,J:Byte;
X : integer;
For I:=2 to pocet do begin
X:=A[I];
A[0]:=X;
J:=I-1;
While X < A[J] Do Begin
A[J+1]:=A[J];
X:=J-1;
End;
A[J+1]:=X;
End;Všechno špatně, ani jeden z Vašich kódu není funkce :-)
Já sice nemám, ale už instaluju na Acerovi Delphi, tak ti za pár Granátů nějakou pěknou napíšu :-)
Tak už je to tady. Furt jsem tomu nemoh přijít na kloub, takže jsem to začal brát osobně… No a řešení bylo nakonec, jako obvykle, přejednoduché :-)
type Tpole = array of string;
// Delphi ti nedovolí funkci vracející pole, takže musíš přes vlastní typ.
//definice fce:
function explode(separator,text:String): Tpole;
// no a už to jede:
function explode;
var i,lastpos:integer;
begin
i:=1;
lastpos:=1;
while (i<=length(text)+1) do begin
if (copy(text,i,length(separator))=separator) or (i=length(text)+1) then begin
if copy(text,lastpos,i-lastpos)<>'' then begin
setlength(result,length(result)+1);
result[length(result)-1]:=copy(text,lastpos,i-lastpos);
end;
inc(i,length(separator));
lastpos:=i;
end else begin
inc(i);
end;
end;
end;
funkce se volá
a:=explode(' ','Je lepší Budvar nebo Granát?');
Nejni to extra efektivní, ale rulez, a to je hlavní :-)
pozdější update:Trochu jsem browsil a zjistil, že ty orgie s polema jsou vlastně zbytečný... Když to předěláš z Tpole na TStrings, pojede to eště líp, bo TStrings je, zjednodušeně řečeno, to samý jako array of string.
Andrew
Explode
AssignFile(F, filename);
Reset(F);
Readln(F, S);
CloseFile(F);
showMessage(s);
delka := 0;
while length(trim(S)) > 0 do begin
a := Pos(',', S);
if (a = 0) then begin
pole[delka] := StrToInt(S);
S := '';
end
else
begin
pole[delka] := StrToInt(copy(S, 0, a - 1));
inc(delka);
S := copy(S, a + 1, length(S));
end;
end;
BubbleSort;