SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: ALM en Sábado 12 de Junio de 2004, 20:22

Título: Sustituir Caracteres
Publicado por: ALM en Sábado 12 de Junio de 2004, 20:22
Tengo una cadena de caracteres de la cual identifico la palabra mas grande y la más pequeña. Una vez identificadas, necesito cambiarlas de orden, es dedir, poner a la pequeña en el lugar de la grande y visceversa.

Me podrían ayudar, es urgente !!!!


Gracuas

 :rolleyes:
Título: Re: Sustituir Caracteres
Publicado por: Super_G en Domingo 13 de Junio de 2004, 00:39
Parece un problema cachirulo;


en resumen si tengo la siguiete cadena:

cadena db 'la cadena mas corta y nada mas',0


deberia quedar asi:

cadena db 'la y mas corta cadena nada mas',0

¿cierto?

1º debo reconocer las palabras(estas estan separadas por espacios[ ] con el valor de 32 en Ascii)

2º encontrar de alguna forma la palabra mas corta y la mas larga, o lo mismo ubicar sus posiciones dentro la cadena(puedo dejar un puntero en la palabra mas corta y otro en la mas larga).

3º(manejar bien los punteros) copio la cadena en otra, hasta "llegar" a la palabra(sea la corata o la larga), copio su opuesta(si estamos sobra la mas larga copio la mas corta y viseverza), a continuacion copio el resto de la cadena hasta llegar a la otra palabra y rescion copio su opuesta y por ultimo copio el resto.

para la primera parte podria ser asi:

Código: Text
  1.  
  2.           &#59;;Busqueda de la palabra mas larga
  3.           &#59;;DI se queda apuntando a la palabra mas larga
  4.            mov si,offset cadena
  5.            mov conta0,0
  6.            mov conta1,0
  7.    c1:   mov al,[si]          
  8.            cmp  al,0
  9.            jz NEXT1  
  10.            cmp  al.32&#59;;' ' espacio
  11.            jz  c0
  12.            jmp    n0
  13.    c0:    mov al, conta1       &#59;contador que identifica la palabra mas larga
  14.            cmp al,conta0         &#59;contador anterior
  15.            jb    ct0                  &#59;si es menor
  16.            mov di,si
  17.            mov conta0,al
  18.    ct0:   inc si
  19.             mov conta1,0   &#59;;reiniciamos contador
  20.            jmp c1     &#59;;incrementa SI hasta  pasar los espacios      
  21.    n0:   inc conta1
  22.            inc si       &#59;; siguiente caracter
  23.    NEXT1:
  24. .
  25. .
  26. .
  27.        
  28.  
  29. cadena db 'la cadena mas corta y nada mas',0
  30. conta1 db 0
  31. conta0 db 0
  32.            
  33.  
  34.  
no revise el codigo y de seguro que tiene errores,pero lo importante es la idea.