Strcmp

Strcmp

por Mateus Barros Rodrigues -
Número de respostas: 3

No meu codigo estava utilizando a função strcmp da string.h para comparar strings, mas, em exemplos onde as strings eram claramente diferentes("a" e "w") ele apontava que eram iguais. Mas ao usar achaPalavra("a",1,"w",1) && achaPalavra("w",1,"a",1) [exemplo] ele retornava que são diferentes, como deveria.

Alguma ideia do porque a strcmp não está funcionando como deveria?

 

Em resposta à Mateus Barros Rodrigues

Re: Strcmp

por Bruno Endo -

Cara nao sei se isso vai ajuda muito pq nao sei como vc ta usando a funcao,  a Funcao strcmp compara strings de forma q ele nao retorna apenas se sao iguais ou nao as duas strings. Ele compara  e se forem iguais ele retorna 0 , agora  no caso das strings serem diferentes ele vai retorna um numero maior do que 0 caso o primeiro char que for diferente tiver um valor maior na primeira string do que na segunda, e um numero menor do que 0 se for o contrario.

Espero ter ajudado.

Em resposta à Mateus Barros Rodrigues

Re: Strcmp

por José Coelho de Pina -

Oi Mateus,

Alguma ideia do porque a strcmp não está funcionando como deveria?

Não sei a razão do seu programa não estar funcionando corretamente, mas meu chute é que a função strcmp está funcionando como deve. A função strcmp é bem fácil de ser implementada. Eis uma possível implementação dessa função (como é mostrada no livro do Kernigham e Ritchie):

/* strcmp: return <0 if s<t, 0 if s==t, >0 if s>t */
int 
strcmp (char *s, char *t)
{
   for ( ; *s == *t; s++, t++)
     if (*s == '\0') 
       return 0; /* s é substring de t */
 
   return *s - *t;
}

Uma outra implementação seria

int 
strcmp (char *s, char *t)
{
   int i;
   
   for (i = 0; s[i] == t[i]; i++)
     if (s[i] == '\0') 
       return 0; /* s é substring de t */
 
   return s[i] - t[i]; 
}

Apenas repetindo o que o Bruno já escreveu:

meu-prompt>man strscmp
STRCMP(3)                                  Linux Programmer's Manual                                  STRCMP(3)

NAME
       strcmp, strncmp - compare two strings

SYNOPSIS
       #include <string.h>

       int strcmp(const char *s1, const char *s2);

       int strncmp(const char *s1, const char *s2, size_t n);

DESCRIPTION
       The strcmp() function compares the two strings s1 and s2.  It returns an integer less than, equal to, or
       greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.

       The strncmp() function is similar, except it only compares the first (at most) n characters  of  s1  and
       s2.

RETURN VALUE
       The  strcmp()  and strncmp() functions return an integer less than, equal to, or greater than zero if s1
       (or the first n bytes thereof) is found, respectively, to be less than, to match, or be greater than s2.

CONFORMING TO
       SVr4, 4.3BSD, C89, C99.

SEE ALSO
       bcmp(3), memcmp(3), strcasecmp(3),  strcoll(3),  string(3),  strncasecmp(3),  strverscmp(3),  wcscmp(3),
       wcsncmp(3)

COLOPHON
       This  page  is  part  of release 3.40 of the Linux man-pages project.  A description of the project, and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.


Em resposta à José Coelho de Pina

Re: Strcmp

por Andrew Kurauchi -

Apenas repetindo o que o Bruno e o Coelho já falaram, em outras palavras:

if(strcmp("a", "b")) {
printf("Iguais?!");
}

Deve imprimir "Iguais?!", pois 'a' - 'b' == -1, que é diferente de zero, logo é verdadeiro.