PDA

Ver la Versión Completa : Recorrer un STRING


creus
07-01-2007, 21:31:40
Necesito saber como recorrer un string ( previamente sabiendo la longitud de la cadena ( length, creo ) con un While y poder alamacenar una posición del indice en concreto, en una variable.

Gracias a todos.

seoane
07-01-2007, 21:45:08
La forma habitual de recorrer una cadena, al menos para mi, es usar un bucle for

var
i: integer;
s: string;
begin
s:= 'Hola mundo';
for i:=1 to Length(s) do
begin
ShowMessage(s[i]);
end;
end;


Si tiene que ser forzosamente con un bucle while:

var
i: integer;
s: string;
begin
s:= 'Hola mundo';
i:= 0;
while i < Length(s) do
begin
inc(i);
ShowMessage(s[i]);
end;
end;


Incluso podemos usar un repeat

var
i: integer;
s: string;
begin
s:= 'Hola mundo';
i:= 1;
if i <= Length(s) then
repeat
ShowMessage(s[i]);
inc(i);
until i > Length(s);
end;


A partir de ahí, podemos usar toda una serie de métodos a cada cual mas exótico. Por ejemplo:

var
p: PChar;
s: string;
begin
s:= 'Hola mundo';
p:= PChar(s);
while Boolean(P^) do
begin
ShowMessage(Char(P^));
inc(P);
end;
end;


O incluso podemos destruir la cadena según la procesamos

var
s: string;
begin
s:= 'Hola mundo';
while Length(s)>0 do
begin
ShowMessage(s[1]);
delete(s,1,1);
end;
end;


:D Y podriamos continuar asi durante un rato ....

Delphius
07-01-2007, 21:59:55
Necesito saber como recorrer un string ( previamente sabiendo la longitud de la cadena ( length, creo ) con un While y poder alamacenar una posición del indice en concreto, en una variable.

No termino de comprender... para que recorrer el string... si se puede acceder a una posición determinada en forma más simple. Si sólo hay que estraer un solo caracter... pues nos posicionamos en el lugar...

Si bien seoane te respondió... a mi me parece más sencillo algo como:

function Tform1.ExtraerChar(texto: string; Pos: integer): string;
begin
if (Pos > Length(texto)) OR (Pos < 1)
then exit;
result := Texto[pos];

De seguro que ya hay funciones más optimas que la mia... y que ya vienen en Delphi. Hay un amplio apartado de esas: pos, length, delete, etc..

Saludos,

EDITO: tenia un error en el código... antes decia (Pos < 0) y es (Pos < 1)

creus
07-01-2007, 22:52:37
Ok seoane, tenía un pequeño problema de posicionamiento del indice.

Gracias a todos