Fórum Sobre String #226584
17/04/2004
0
Gostaria de saber como eu faço para colocar uma variavel string invertida
dentro de um edit.
ex:
var
teste : string;
begin
teste:=´12345´;
edit1.text:= teste invertido // ´54321´
end;
sendo que 54321 é igual a teste só que invertido.
Estudante
Curtir tópico
+ 0Posts
17/04/2004
Cebikyn
function ReverseStr(const aSourceString : String) : String; var L : Integer; S, D : Pointer; begin L := Length(aSourceString); SetLength(Result,L); if L = 0 then exit; S := @aSourceString[1]; D := @Result[L]; asm push ESI push EDI mov ECX, L mov ESI, S mov EDI, D @Loop: mov Al, [ESI] inc ESI mov [EDI], Al dec EDI dec ECX jnz @Loop pop EDI pop ESI end; end;
Depois para usar:
var teste : string; begin teste:=´12345´; edit1.text:= ReverseStr(teste); end;
E lembre-se: Use títulos descritivos para seus tópicos, caso contrário um moderador irá editar ou até mesmo bloquear/deletar sua mensagem! Por ex: ´Como inverter uma String?´.
Gostei + 0
17/04/2004
Vinicius2k
function InverterStr (S:String): String; var i: integer; begin Result:= ´´; for i:= Length(S) downto 1 do Result:= Result + S[i]; end;
para usar, no seu modelo :
edit1.text:= InverterStr(teste);
T+
Gostei + 0
17/04/2004
Cebikyn
E um detalhe, a função com assembler é bem mais rápida, mas a com o loop é bem mais fácil de entender, eu mesmo só entendo até o [b:c0c724dbc2]asm[/b:c0c724dbc2] da função que eu coloquei...
Gostei + 0
17/04/2004
Beppe
Em uma comparação direta com a do vina, sim, pq concatenação de strings aloca memória. Em Delphi puro poderia ser alocada a string com seu tamanho final(como a função do cebi faz) e indexar nela(Result[I] := Result[Length(Result) - I + 1]). Eu costumo passar para PChar, apenas para evitar a checagem de bounds.
Gostei + 0
17/04/2004
Estudante
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)