C/Visual C - ejercicio en C

 
Vista:

ejercicio en C

Publicado por María (1 intervención) el 30/05/2006 23:57:00
Necesito hacer en C un ejercicio que reuna las siguientes caracterísicas:

Dada dos frases introducidas por el usuario, implementar una función que
determine si son iguales o no, es una simulación de la función strcmp() ,utilizando
posteriormente para una comparativa de resultados. Dando los dos resultados una de
la función implementada y otra de strcmp().Toda operación se realizará con
funciones.

Alguien me lo puede enviar. Ya no se donde buscar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ejercicio en C

Publicado por fernando.gomez (1603 intervenciones) el 31/05/2006 00:14:20
Ya, ¿a poco no sabes cómo hacerle? La manera más fácil es recorrer caracter por caracter de las dos frases, y si un caracter difiere del otro, entonces son diferentes...

int StrComp(const char* sz1, const char* sz2)
{
int iMaxSize;
int iRet;

iMaxSize = min(strlen(sz1), strlen(sz2));
iRet = 0;

for (int i = 0; i < iMaxSize; i++)
{

if (sz1[i] > sz2[i]) {
iRet = 1;
break;
} else if (sz1[i] < sz2[i]) {
iRet = -1;
break;
} else {
iRet = 0;
}

}

// aquí hay truco

return iRet;
}

La función anterior tiene como consecuencia los siguientes resultados, dado el siguiente código:

cout << StrCmp("Hola", "hola") << endl;
cout << StrCmp("abcd", "aacd") << endl;
cout << StrCmp("abcd, "abcd") << endl;
cout << StrCmp("Truco", "Trucoabc") << endl;

1
-1
0
0

Como ves, la última salida debería haber sido -1... esa validación te la dejo, y la tienes que agregar donde está el comentario "aquí hay truco".

Obviamente esta función es terriblemente ineficiente, comparado con el siguiente:

CODESEG

public strcmp
strcmp proc

.FPO ( 0, 2, 0, 0, 0, 0 )

mov edx,[esp + 4] ; edx = src
mov ecx,[esp + 8] ; ecx = dst

test edx,3
jnz short dopartial

align 4
dodwords:
mov eax,[edx]

cmp al,[ecx]
jne short donene
or al,al
jz short doneeq
cmp ah,[ecx + 1]
jne short donene
or ah,ah
jz short doneeq

shr eax,16

cmp al,[ecx + 2]
jne short donene
or al,al
jz short doneeq
cmp ah,[ecx + 3]
jne short donene
add ecx,4
add edx,4
or ah,ah
jnz short dodwords

align 4
doneeq:
xor eax,eax
ret

align 4
donene:
sbb eax,eax
sal eax,1
inc eax
ret

align 4
dopartial:
test edx,1
jz short doword

mov al,[edx]
inc edx
cmp al,[ecx]
jne short donene
inc ecx
or al,al
jz short doneeq

test edx,2
jz short dodwords

align 4
doword:
mov ax,[edx]
add edx,2
cmp al,[ecx]
jne short donene
or al,al
jz short doneeq
cmp ah,[ecx + 1]
jne short donene
or ah,ah
jz short doneeq
add ecx,2
jmp short dodwords

strcmp endp

end

que está en ensamblador.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar