Luís Paiva 0 Posted April 30, 2019 Report Share Posted April 30, 2019 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. Link to post Share on other sites
thoga31 577 Posted May 1, 2019 Report Share Posted May 1, 2019 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! Link to post Share on other sites
Luís Paiva 0 Posted May 11, 2019 Author Report Share Posted May 11, 2019 @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 Link to post Share on other sites
thoga31 577 Posted May 13, 2019 Report Share Posted May 13, 2019 (edited) 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 May 13, 2019 by thoga31 Knowledge is free! Link to post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now