que - strcmp() devuelve valores en C
strcmp ccs (5)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo funciona strcmp ()? 9 respuestas
Estoy aprendiendo acerca de strcmp()
en C. Entiendo que cuando dos cadenas son iguales, strcmp
devuelve 0.
Sin embargo, cuando las páginas del manual indican que strcmp
devuelve menos de 0 cuando la primera cadena es menor que la segunda, ¿se refiere a la longitud, los valores ASCII o algo más?
En este sentido, "menos que" para cadenas significa orden lexicográfico (alfabético).
Entonces el cat
es menos que el dog
porque el cat
es alfabéticamente antes que el dog
.
El orden lexicográfico es, en cierto sentido, una extensión del orden alfabético a todos los caracteres ASCII (y UNICODE).
Mire el siguiente programa, aquí estoy devolviendo el valor dependiendo de la cadena que haya escrito. La función strcmp
retrun valor de acuerdo con el valor ASCII de toda la cadena considerada totalmente.
Por ejemplo. str1 = "aab"
y str2 = "aaa"
devolverá 1 como aab> aaa.
int main()
{
char str1[15], str2[15];
int n;
printf("Enter the str1 string: ");
gets(str1);
printf("Enter the str2 string : ");
gets(str2);
n = strcmp(str1, str2);
printf("Value returned = %d/n", n);
return 0;
}
Un valor mayor que cero indica que el primer carácter que no coincide tiene un valor mayor en la primera cadena que en la segunda, y un valor menor que cero indica lo contrario.
C99 7.21.4:
El signo de un valor distinto de cero devuelto por las funciones de comparación memcmp , strcmp y strncmp está determinado por el signo de la diferencia entre los valores del primer par de caracteres (ambos interpretados como caracteres sin signo ) que difieren en los objetos que se comparan.
Tenga en cuenta, en particular, que el resultado no depende de la configuración regional actual; LC_COLLATE
(ver C99 7.11) afecta a strcoll()
y strxfrm()
, pero no a strcmp()
.
int strcmp (const char * s1, const char * s2)
{
for(; *s1 == *s2; ++s1, ++s2)
if(*s1 == 0)
return 0;
return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
}