strcmp() devuelve valores en C [duplicate]

2 minutos de lectura

avatar de usuario
dmubu

estoy aprendiendo sobre 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 cadena, ¿se refiere a la longitud, los valores ASCII o algo más?

En este sentido, “menor que” para cadenas significa orden lexicográfico (alfabético).

Asi que cat es menos que dog porque cat es alfabéticamente antes dog.

El orden lexicográfico es, en cierto sentido, una extensión del orden alfabético a todos los caracteres ASCII (y UNICODE).

  • A partir de esta respuesta, alguien podría creer que strcmp() conoce Unicode. Ese no es el caso.

    – Profesor Falken

    5 de octubre de 2011 a las 7:37

  • @Amigable Clark Kant: Para Unicode, me refería implícitamente a la versión de caracteres amplios de strcmp(). Pero sí, entiendo tu punto.

    – Místico

    5 de octubre de 2011 a las 7:39

Un valor mayor a 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 a cero indica lo contrario.

C99 7.21.4:

El signo de un valor distinto de cero devuelto por las funciones de comparación
memcmp, strcmpy strncmp está determinado por el signo de la diferencia entre los valores del primer par de caracteres (ambos interpretados como carácter sin firmar) 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 strcoll() y strxfrm()pero no 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;
    }

avatar de usuario
Dalbir Singh

Mire el siguiente programa, aquí estoy devolviendo el valor dependiendo de la cadena que haya escrito. La función strcmp valor de retorno de acuerdo con el valor ASCII de toda la cadena considerada totalmente.

Por ej. 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;
}

  • Bienvenido a stackoverflow y gracias por su respuesta. Tenga en cuenta que esta pregunta se respondió hace más de dos años y tiene una respuesta aceptada decente. Además, su respuesta realmente no responde a la pregunta original.

    – Itay

    21 de septiembre de 2013 a las 10:03

  • Bienvenido a stackoverflow y gracias por su respuesta. Tenga en cuenta que esta pregunta se respondió hace más de dos años y tiene una respuesta aceptada decente. Además, su respuesta realmente no responde a la pregunta original.

    – Itay

    21 de septiembre de 2013 a las 10:03

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad