string

0

jak pobrać 2 pierwsze znaki ze stringa?

0

Poczytaj KURS!!!!!!!!!!!!

[code]Text[1]+Text[2][/code]

0

a nie bo Copy(String, 1, 2) ;p

ale to pytanie całkiem niedawno już było na forum

0

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.

0

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ć :)

0

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]

0

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;

;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1