Programación General > C/C++

 Uso De Strcmp

(1/4) > >>

Penguin-man:
Hola, estaba buscando alguna funcion que me permitiera comparar cadenas de caracteres y me encontre con una llamada strcmp en la libreria string.h

La probe y si funciona pero no entiendo muy bien que hace


--- Código: Text ---  /*longitud de las cadenas*/          printf ("\n%s es de %d caracteres de largo\n",str1,strlen(str1));          printf ("\n%s es de %d caracteres de largo\n",str2,strlen(str2));          /*comparar cadenas*/          i=strcmp(str1,str2);          if (!i)       printf ("\nLas cadenas son iguales\n");          else         if (i<0) printf ("\n%s es menor que %s",str1,str2);          else printf ("\n%s es mayor que %s",str1,str2);  

Lo que no entiendo es por ejemplo su uso, que valor debelvae si son iguales, o diferentes y eso de

if(!¡) alguien podria explicarme?

JuanK:
strcmp devuelve 0 si las cadenas son iguales, de lo contrario devuelve diferente 0 bien sea positivo o negativo dependiendo cual cadena sea 'mayor' que la otra.

así que


--- Código: Text ---if (!i)  

esta diciendo en este caso que si i es igual a 0 , aunque también validaría que si i es igual a nulo


decir que


--- Código: Text ---if(!i) 
es lo mismo que decir que


--- Código: Text ---if(i==0) 
o


--- Código: Text ---if(i==NULL) 
Desglosando:


--- Código: Text ---if ( !i) 
i es igual a 0 o a NULL , en lenguaje C se entiende se entiende que 0 o NULL es falso y cualquiera diferente de 0 o NULL es verdadero.

El el operador ! es una negación lógica así que negar algo que es falso es decir que ese algo sea verdadero. Por esta razón al cumplir la validación:


--- Código: Text ---if ( !i) 

en tu ejemplo se entiende que las cadenas son iguales.

robertogt:
strcmp, lo que hace es que devuelve un cero si las dos cadenas son exactamente iguales, es decir 'hola' no es lo mismo que 'Hola', devuelve un numero menor a cero si la segunda cadena es mayor a la primera, por ejemplo 'aa' es menor que 'ab', y devuelve mayor a cero si la primera cadena es mayor a la segunda, ahora si no quieres que importe el CASE de las cadenas, podes usar strcmpi.

F_Tanori:
Hola mira


Esa funcion devuelve 0 si las dos cadenas son iguales el signo de (!) es el NOT de C  el if es una comparacion que espera un valor logico
binario 0/1 entonces


entonces cuando la funcion devuelve 0 'niegas' el resultado y eso es lo que interpreta el if


IF (!i) "Si es 0 entonces es 1 " (la table de verdad del NOT) :P


Saludos



Se me adelantaron :P
--------------
 :rolleyes:   :lol:
--------------

JuanK:

--- Citar ---if es una comparación que espera un valor logico
--- Fin de la cita ---
hasta ahí bien...


--- Citar ---binario 0/1 entonces
--- Fin de la cita ---
Ahi si ya no, porque si fuera asi el if reventaria al enviarle cualquier valor diferente de 1 o 0 y como ya lo mencione te compara 0, NULL o diferente de NULL.


--- Citar ---IF (!i) "Si es 0 entonces es 1 " (la table de verdad del NOT) :P
--- Fin de la cita ---
Casi... pero no solo negar 0 es 1, negar NULL también es 1.

 :rolleyes:

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa