Jump to content
Luís Paiva

mystrcmp e apontadores

Recommended Posts

Luís Paiva
int myStrCmp (const char *s1, const char *s2) {
    const unsigned char *p1 = (const unsigned char *)s1;
    const unsigned char *p2 = (const unsigned char *)s2;

    while (*p1 != '\0') {
        if (*p2 == '\0') return  1;
        if (*p2 > *p1)   return -1;
        if (*p1 > *p2)   return  1;

        p1++;
        p2++;
    }

    if (*p2 != '\0') return -1;

    return 0;
}

alguem me pode explicar este codigo como alternativa ao strcmp? Porque são demasiados apontadores e não consigo entender nada.

Share this post


Link to post
Share on other sites
thoga31

Isso não tem assim "tantos apontadores". Precisas de entender o que é uma string, como ela se organiza em memória e como a podes manipular.

Essa função essencialmente copia para variáveis locais a localização em memória das duas strings e vai iterando sobre os seus caracteres para perceber se são absolutamente iguais ou se há diferenças - assim que encontra um caracter diferente, a função é interrompida e devolve 1 ou -1, não sendo necessário iterar os restantes caracteres.


Knowledge is free!

Share this post


Link to post
Share on other sites
Luís Paiva

@thoga31 Eu penso que entendo a teoria melhor que a prática. Eu sei isso que me disseste, talvez devesse ter feito a pergunta de melhor forma. Não entendo os parênteses no (const unsigned char *) s1 e (const unsigned char *) s2. E se possível consegues dar-me um exemplo para a função main para verificar se o myStrCmp está correto? Isso é algo que tenho muitas dificuldades, construir uma função main que me mostre os resultados das funções anteriores. Obrigado

Share this post


Link to post
Share on other sites
thoga31
Em 11/05/2019 às 12:37, Luís Paiva disse:

Não entendo os parênteses no (const unsigned char *) s1 e (const unsigned char *) s2

Isso é um type cast, isto é, conversão de um tipo de dados para outro de forma explícita. Colocas entre parêntesis, antes do valor a ser convertido, o novo tipo de dados para o qual queres que o valor seja convertido.

 

Em 11/05/2019 às 12:37, Luís Paiva disse:

consegues dar-me um exemplo para a função main para verificar se o myStrCmp está correto?

Uma das habilidades fundamentais de um programador é analisar o protótipo de uma função e daí conseguir deduzir como a usar. Tenta treinar isso.

Neste caso, interpreta o protótipo da função: é uma função que retorna um int - tens, portanto, de "apanhar" o valor de retorno na main de alguma forma - e recebe dois argumentos ambos do tipo const char *, isto é, um vector de caracteres constante (por outras palavras, uma string).

Logo, podes usar algo deste género:

int result = myStrCmp("batatas", "cebolas");

 

Cumprimentos.

Edited by thoga31

Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.