elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Comparar cadenas sin usar strcmp
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Comparar cadenas sin usar strcmp  (Leído 21,556 veces)
do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Comparar cadenas sin usar strcmp
« Respuesta #10 en: 25 Octubre 2010, 04:11 am »

Paso por paso.

El for no tiene cuerpo, todas las comprobaciones se hacen en la condicion de continuidad. (Date cuenta de que nada mas terminar la declaracion del for, hay un punto y coma, por lo tanto el valor se le asigna a ord al salir del for)

Cualquier cadena termina en cero, y cero en C significa falso y distinto de cero verdadero. Por lo tanto
Código
  1. nom1[k] && nom2[k]
  2.  
significa que for se ejecutara mientras las dos cadenas tengan un caracter, o lo que es lo mismo, que el for finalizara cuando se acabe una de las dos cadenas (o las dos).

La siguiente condicion te dice que el for continuara mientras las letras de la posicion actual sean iguales.

Es decir, de todas todas se saldra del for si alguna de las cadenas ha terminado o si el caracter de la posicion i es distinto.

(cambio la i por la k para que no me salga en cursiva)

Caso1: nom1 ha terminado
    En este caso, nom1[k] == 0, por lo tanto si la segunda cadena es mas larga, 0 - letra (no simbolo, sino letra) sera menor que cero. Y si la segunda cadena tambien ha terminado, las dos seran iguales:

Hola
Holaa

o sino

Hola
Hola

(compruebalo mirando las condiciones del for con lapiz y papel)

Caso2: nom2 ha terminado
    Si se da este caso, nom1 no habra terminado (estudia sobre la evaluacion del y logico), pero nom2 si, por lo tando nom1[k]!=0 y nom2[k] == 0, suponiendo que nom1[k] es una letra del alfabeto, se tiene que nom1[k] > 0 y nom2[k] == 0. Es decir, nom1[k] - nom2[k] > 0, lo cual tiene su logica, ya que todas las letras de nom1 seran iguales a las de nom2 mientras no se termine nom2, pero nom1 sera mas larga:

Holaa
Hola
(como antes, comprueba con lapiz y papel que efectivamente es asi)

Caso3: nom1[k] != nom2[k]
    Ahora no ha terminado ni nom1, ni nom2 y se ha encontrado una letra diferente en las cadenas. Por lo tanto nom1[k] - nom2[k] sera menor o mayor que cero, segun nom1[k] sea menoro o mayor alfabeticamente que nom2[k].

(como siempre, compruebalo con lapiz y papel)

¡Saludos!


« Última modificación: 25 Octubre 2010, 04:18 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
PiroskY

Desconectado Desconectado

Mensajes: 76


пирожки


Ver Perfil
Re: Comparar cadenas sin usar strcmp
« Respuesta #11 en: 25 Octubre 2010, 04:26 am »

Entiendo, pero la pregunta era por:

(i = 0 ; nom1[i ] && nom2[i ] && nom1[i ] == nom2[i ] ; i++)

el for va a seguir corriendo mientras nom1 en la posicion i, que?
el resto lo entiendo

Edito:
Relei tu post a ver si entendia, y creo que entendi, o sea
nom1[i ] && nom2[i ]

es equivalente a poner
nom1[i ] != 0 && nom2[i ] != 0 ?

Si es eso ya entendi todo y corto con el off :P


« Última modificación: 25 Octubre 2010, 04:43 am por PiroskY » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Comparar cadenas sin usar strcmp
« Respuesta #12 en: 25 Octubre 2010, 07:01 am »

Eso mismo es, como en C no hay booleanos, una expresion que vale cero es falso, y una que es distinta de cero sera verdadero.

Por lo tanto poner
Código
  1. for(i=0 ; s[i] ; i++)
  2.  
es equivalente a poner
Código
  1. for(i=0 ; s[i] != 0 ; i++)
  2.  

¡Saludos!

Una cosa mas, si en lugar de tomar como valor de la comparacion
Código
  1. ord = nom1[i] - nom2[i];
  2.  
tomas
Código
  1. ord = (unsigned char)nom1[i] - (unsigned char)nom2[i];
  2.  

Te olvidas de los problemas que te pueden dar los simbolos y siempre que una cadena sea mas larga que otra tendras un valor positivo o negativo segun sea la primera o la segunda mas larga.
« Última modificación: 25 Octubre 2010, 07:12 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Intento comparar cadenas [novato] « 1 2 3 »
Programación C/C++
barnix456 20 13,460 Último mensaje 7 Mayo 2012, 20:37 pm
por barnix456
¿Comparar dos cadenas de caracteres en php?
PHP
Netstat89 5 11,124 Último mensaje 1 Octubre 2012, 21:21 pm
por Shell Root
Ayuda: Recorrer cadenas usando strcmp (alternativas), carácter '/0'.
Programación C/C++
Tolkien 2 2,561 Último mensaje 5 Junio 2014, 17:28 pm
por Tolkien
[C] Comparar 2 cadenas sin usar <string.h> « 1 2 »
Programación C/C++
Ataulfo7 16 11,297 Último mensaje 9 Abril 2015, 19:22 pm
por Miseryk
ay forma de comparar 2 cadenas sin strcmp
Programación C/C++
masterkeyes 5 4,612 Último mensaje 17 Agosto 2015, 15:30 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines