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.