Sobre String
Ola pessoal!
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.
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
Curtidas 0
Respostas
Cebikyn
17/04/2004
Use a função abaixo:
Depois para usar:
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?´.
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
Vinicius2k
17/04/2004
A função do Cebis dah uma aula... mas me atrevo a postar uma mais simples... :oops:
para usar, no seu modelo :
T+
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
Cebikyn
17/04/2004
Só pra constar: a função não é minha, faz parte da coleção Fast Strings, disponível em http://www.droopyeyes.com/
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...
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
Beppe
17/04/2004
Só pra constar: a função não é minha, faz parte da coleção Fast Strings, disponível em http://www.droopyeyes.com/
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:7d82b140be]asm[/b:7d82b140be] da função que eu coloquei...
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
Estudante
17/04/2004
Obrigado deu certo
GOSTEI 0