Ayúdame a escribir una función strcmp simple (lenguaje C).
1) La implementación concisa de strcmp en lenguaje C puede ser la siguiente:
int?strcmp(const?char*?s1,?const?char*?s2) p> p>
{
mientras(*s1?amp;amp;?(*s1==*s2))
s1, s2;
return?char*)s2;
}
② El valor de retorno de strcmp puede tener 3 tipos, a saber, lt; = 0, gt; , Sus significados respectivos son: str1 strcmp se usa para comparación binaria, ordenados en el orden del diccionario, por ejemplo: letra a lt;, letra b lt;, letra c lt;, letra d lt;, letra e lt;. Esto se debe a que la codificación ascii de a es 97, mientras que la codificación ascii de A es 65).
Una vez que comprenda esto, el código anterior tendrá sentido. Aunque s1 y s2 están en su lugar desde el principio, se comparan un carácter a la vez. Si s1 está vacío, o s1 no es igual a s2, el ciclo se interrumpe (s1 no está vacío, s2 está vacío, entonces *s1! = *s2, sale del ciclo). El valor de retorno es el carácter cuando se interrumpe el ciclo (las posiciones de s1 y s2 respectivamente, *s1-*s2, si es la 'a'-'A' mencionada anteriormente, el valor de retorno es 97-65=32) , que significa delante de A, strcmp gt;
La razón por la que primero necesitas convertir a const unsigned char* y luego restar es porque c tiene tres tipos de char: char, signed char y unsigned char. Un carácter es algo así como "a", y un carácter con signo es un valor entre -127 y 126, y un carácter sin signo es un valor entre 0 y 255. Convertir a un carácter sin firmar significa "asegurar" 'a' ---gt;97. No importa si no conviertes.
Cabe señalar que muchas implementaciones lib del lenguaje C (como gnu c) tratan el resultado como -1, 0, 1, en lugar de la diferencia en la codificación de caracteres ASCII.