Programación General > C/C++
Uso De Strcmp
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
[#] Página Siguiente
Ir a la versión completa