Fórum Sobre String #226584

17/04/2004

0

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.


Estudante

Estudante

Responder

Posts

17/04/2004

Cebikyn

Use a função abaixo:

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?´.


Responder

Gostei + 0

17/04/2004

Vinicius2k

A função do Cebis dah uma aula... mas me atrevo a postar uma mais simples... :oops:
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+


Responder

Gostei + 0

17/04/2004

Cebikyn

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...


Responder

Gostei + 0

17/04/2004

Beppe

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.


Responder

Gostei + 0

17/04/2004

Estudante

Obrigado deu certo


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar