PDA

Ver la Versión Completa : Función para comprar dos strings


Jere_84
16-06-2012, 16:20:47
Hola Club!, hay alguna función de tipo Booleana que compare dos cadenas de texto? Estuve probando hay muchas pero pero no me convencen. Requiero comparar dos strings dentro de un ciclo, algo asi seria lo que necesito:


if Funcion(oClientDataSet.Fields.Fields[I].FieldName, vCamposClave)= False then
begin
//...
end;


Slds.

mightydragonlor
16-06-2012, 17:30:21
Esta función te devuelve la cantidad de diferencias que encuentra entre las cadenas, aún así, no queda muy claro lo que necesitas.

function Diferencias(Str1, Str2: String): Integer;
var
d : array of array of Integer;
Len1, Len2 : Integer;
i,j,cost:Integer;
begin
Len1:=Length(Str1);
Len2:=Length(Str2);
SetLength(d,Len1+1);
for i := Low(d) to High(d) do
SetLength(d[i],Len2+1);

for i := 0 to Len1 do
d[i,0]:=i;

for j := 0 to Len2 do
d[0,j]:=j;

for i:= 1 to Len1 do
for j:= 1 to Len2 do
begin
if Str1[i]=Str2[j] then
cost:=0
else
cost:=1;
d[i,j]:= Min(d[i-1, j] + 1,
Min(d[i, j-1] + 1,
d[i-1, j-1] + cost)
);
end;
Result:=d[Len1,Len2];
end;

Jere_84
16-06-2012, 17:59:57
Esta función te devuelve la cantidad de diferencias que encuentra entre las cadenas, aún así, no queda muy claro lo que necesitas.

function Diferencias(Str1, Str2: String): Integer;
var
d : array of array of Integer;
Len1, Len2 : Integer;
i,j,cost:Integer;
begin
Len1:=Length(Str1);
Len2:=Length(Str2);
SetLength(d,Len1+1);
for i := Low(d) to High(d) do
SetLength(d[i],Len2+1);

for i := 0 to Len1 do
d[i,0]:=i;

for j := 0 to Len2 do
d[0,j]:=j;

for i:= 1 to Len1 do
for j:= 1 to Len2 do
begin
if Str1[i]=Str2[j] then
cost:=0
else
cost:=1;
d[i,j]:= Min(d[i-1, j] + 1,
Min(d[i, j-1] + 1,
d[i-1, j-1] + cost)
);
end;
Result:=d[Len1,Len2];
end;

Gracias mightydragonlor, pero lo único que necesito es que me digo si son o no iguales. Imagino que debe haber alguna que sea boolean.
Slds.

mightydragonlor
16-06-2012, 18:11:23
Gracias mightydragonlor, pero lo único que necesito es que me digo si son o no iguales. Imagino que debe haber alguna que sea boolean.
Slds.
Prueba con esto.

procedure TForm1.Button1Click(Sender: TObject);
Var a,b: String;
Function Igualdad(Str1, Str2: String): Boolean;
Begin
If Str1=Str2 Then Result:=True Else Result:=False;
end;
begin
a:= '123';
b:= '123';
If Igualdad(a,b) = True Then ShowMessage('Son iguales!') Else ShowMessage('Son diferentes!');
end;

ecfisa
16-06-2012, 20:40:19
lo único que necesito es que me digo si son o no iguales.

Hola Jere_84.

Entonces, otra posibilidad es utilizar cualquiera de las funciones StrCompare o AnsiStrCompare, estas devuelven un valor que según la propia ayuda de Delphi es:

Condition Return Value
S1 > S2 > 0
S1 < S2 < 0
S1 = S2 = 0


Ahora podrías hacer:

if Boolean(CompareStr('Hola', 'Hola')) then // True si son <>
ShowMessage('Diferentes')
else
ShowMessage('Iguales');


Saludos.

Delphius
18-06-2012, 04:13:29
Pues... no conozco si existe una función para comprar strings. Es la primera vez que "escucho" que se tenga que pagar por usarlos :D

Ahora yendo a tu pregunta: Define para ti que dos strings sean iguales... porque a mi me huele a que te estás complicando al puro %$#&@. Define realmente que es "compararlos"
En principio para algo tan trivial y básico ¿Hace falta una función? ¿Que o quien te impide hacer algo como:

if String1 = String2
then ShowMessage('Son Iguales macho. ¿Que no ves?')
else ShowMessage('Pues resulta que somos distintos. Y no hizo falta de más para compararnos');

Digo... o es que yo me volví más tarado, que puede ser y no descarto :D , o es que tu esperas algo más de una "comparación". A ver si te explicas porque...

Saludos,

cloayza
18-06-2012, 20:51:19
Bueno en delphi xe existen varias funciones para realizar lo que requieres...

Unit: SysUtils.Pas

SameStr
SameText
CompareStr
CompareText
AnsiCompareStr
AnsiCompareText
CompareMem


Cada una con sus características.

En la unit StrUtils.Pas, existen mas funciones la cosa sería buscar...

Saludos cordiales


Saludos

Jere_84
18-06-2012, 21:42:38
Bueno en delphi xe existen varias funciones para realizar lo que requieres...

Unit: SysUtils.Pas

SameStr
SameText
CompareStr
CompareText
AnsiCompareStr
AnsiCompareText
CompareMem


Cada una con sus características.

En la unit StrUtils.Pas, existen mas funciones la cosa sería buscar...

Saludos cordiales


Saludos

Muchas Gracias, me quede con: SameText

Slds.