memcmp - Saber se uma string é menor, maior ou igual a outra

  • memcmp: int memcmp( char *str1, char *str2, int n );
Vamos aprender como implementar a função memcmp(), que recebe duas strings e compara seus 'n' primeiros elementos, de forma lexicográfica.

Se a string 1 for menor que a string 2, retorna -1.
Se a string 1 for maior que a string 2, retorna 1.
Se as strings forem iguais, retorna 0.


A função memcmp() - Como saber se uma string é maior, menor ou igual a outra


Vamos comparar as 'n' primeiras posições das duas strings, ou seja, de 0 até n-1.
A comparação é feita caractere por caractere.
Lembrando que caracteres são, na verdade, números inteiros e sua representação está na tabela ASCII.

Assim, uma comparação de letras seria:
a = b
a < b
z > a

Portanto, podemos comparar diretamente os caracteres das strings.
Se em algum momento da comparação, algum caractere da string 1 for menor que o da string 2, a função pára e retorna -1.
Se em algum momento da comparação, algum caractere da string 2 for maior que o da string 2, a função pára e retorna 1.

Após todo o processo, se não retornar nem 1 ou -1, é porque as strings são idênticas e devem retornar valor 0.

Veja como fica nosso código:


int memcmp(char *str1, char *str2, int n)
{
    int i;

    for(i=0 ; i < n ; i++)
    {
            if(str1[i] < str2[i])
                return -1;
            else
                if(str1[i] > str2[i])
                    return 1;
    }
    return 0;
}

Note, porém, que uma letra maiúscula difere de uma minúscula. Para tratar essa comparação sem que isso importe, devemos passar os caracteres para maiúsculo ou minúsculo.

Para passar tudo para maiúsculo, podemos usar a função toupper(), da biblioteca ctype.h:
toupper( str1[i] ) < toupper( str2[i] )

Ou passar tudo para minúsculo, com a função tolower(), também da ctype.h e análoga ao exemplo acima.

Um comentário:

  1. "Assim, uma comparação de letras seria:
    a = b
    a < b
    z > a"

    Por acaso não seria, a = A?

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.