jak pobrać 2 pierwsze znaki ze stringa?
Poczytaj KURS!!!!!!!!!!!!
[code]Text[1]+Text[2][/code]
a nie bo Copy(String, 1, 2) ;p
ale to pytanie całkiem niedawno już było na forum
a nie bo :
[code] Text[1]+Text[2][/code]
Ktos : wykonaj swoj i Szymka kod 100 000 razy, i sprawdz co jest szybsze :)
rozwiązanie :
Kod szymka wygrywa !
A to dlatego że odwołuje się bezpośrednio do elementu tablicy (jaką jest string), w copy jest tak że najpierw wywoływana jest funkcja, potem jakieś śmieszne obcinanie, wykorzystywanie pamięci itd. itp. a potem zwracanie tejże funkcji.
Hmm. Jak tak od razu optymalizować to chyba tak jest lepiej:
var
s: string[2];
Text: string;
begin
Text := 'Ala ma kota';
s[1] := Text[1];
s[2] := Text[2];
s[0] := Char(2);
Caption := s;
end;
lub jeszcze lepiej tak:
type
TStr = string[2];
var
z: TStr;
Text: string;
begin
Text := 'Ala ma kota';
z := TStr(Text);
Caption := z;
end;
Chyba już zaczynam przesadzać :)
Ja bym też przetestował
var
s: string[2];
Text: string;
begin
Text := 'Ala ma kota';
Move(Text[1],s[1],2);
s[0]:=2;
Caption := s;
end;
oraz
{$WRITEABLECONST ON}
const
s:string[2]='xx';
var
Text: string;
begin
Text := 'Ala ma kota';
Move(Text[1],s[1],2);
Caption := s;
end;
{$WRITEABLECONST OFF}
[czas] [cisza]
s[0] := 2; chyba nie przejdzie.
A patrząc w źródła Move nie wygląda to na zbyt szybką metodę.
Popadając w skarajności można jeszcze tak zrobić:
var
s: string[2];
Text: string[30];
begin
Text := 'Ala ma kota';
asm
mov ax, word ptr Text[1]
mov word ptr s[1], ax
mov byte ptr s[0], 2
end;
Caption := s;
end;
;-)