[ Foro de Pascal ]

eliminados en cadena

16-Feb-2014 22:17
Invitado (Carlos Jurado)
4 Respuestas

buen dia para todos.
queria en esta ocasion profesor si me puedes dar una idea o algun tipo de procedimiento para realizar el siguiente planteamiento.
tengo dos cadenas de texto, una original y otra modificada.

ejemplo
cadena original:
                               Este es un ejemplo
cadena modificada:
                               Este no es un ejemplo
entonces el programa debe decirme de la cadena modificada respecto a la original que en la posicion 6 se eliminaron 3 caracteres (incluido el espacio) y mostrar solo las letras eliminadas, en este caso : "no"

podrias hecharme una mano profesor en cuanto a alguna forma de desarrollarlo, tengo la idea de inicialmente bueno , leer las dos cadenas y luego con dos for :

 
for i:=1 to length(cad1) do
   for j:=1 to length(cad2) then
     if  (cad2[j] =  '  ' )   and   (cad1[i]= '  '  then
         if (cad2[j+1] 
 


 bueno la verdad aqui ya me hago un lio, pues la idea es que despues de encontrar espacios en cada cadena mirar cada caracter y mirar si son iguales pero no se  profesor aqui como te digo he quedado y eso si es que lo que pense es correcto, por favor te pido tu ayuda para poder terminarlo, agradeciendo inmensamente tu generosa ayuda.


17-Feb-2014 11:55
Nacho Cabanes (+32)

Olvídate de los espacios. Simplemente vas mirando si cada letra es igual, con un único "for" que recorra la cadena más corta. Necesitarás un contador para la posición en esa cadena y otro contador distinto para la posición dentro de la "cadena grande". Cuando una letra no coincida, la vuelcas a una cadena auxiliar y aumentas el contador de posición en esa "cadena grande" para comparar la siguiente letra y ver si también es distinta.


17-Feb-2014 12:54
Invitado (Carlos Jurado)

Hola profesor,gracias por responderme, sin embargo quede algo confundido en tu respuesta un tanto teorica, pues no se a que te refieres cuando me dices que a traves de un solo for recorra la cadena mas corta bueno eso seria:

 
  for i:=1 to length(cad1) do
 


ok, pero luego me dices que vaya " mirando si cada letra es igual,"  y no comprendo si estoy recorriendo una sola cadena la mas corta como puedo ir comparando o mirando si cada letra es igual, osea respecto a que estoy comparando,es que al hablarme de un solo for no comprendo como podria ir comparando ,podrias matizarme un poco mejor esta parte profesor, disculpa si no lo veo tan claro como tu, recuerda que estamos en ese proceso de aprender y nos cuesta a veces mucho lo facil quiza, que hago con la cadena de mayor longitud otro for, es que me confundi mas, pense que deberia hacerse dos for uno externo que recorra la ccadema de menor longitud y luego un for interno que recorriera la cadena de mayor longitud y luego comparar pero no se como se comparan caracteres es decir como se si a no es igual a b etc, por favor ayudame a sacarlo adeante y mil gracias, lo de volcar si que lo entiendo.


17-Feb-2014 15:40
Nacho Cabanes (+32)

Se parece mucho a lo que habías empezado, pero con un único "for". No lo puedo probar ahora, pero podría ser algo como:

 
pos2 := 1;
for pos1:=1 to length(cad1) do
    begin
    if (cad1[pos1] = cad2[pos2]) then  { Si la letra es igual, }
        pos2 := pos2 + 1               { avanzo también en la segunda palabra }
    else while (cad1[pos1] <> cad2[pos2]) do   { Si son distintas, quizá varias }
        begin
        diferencias := diferencias+cad2[pos2]; { Memorizo diferencias }
        pos2 := pos2 + 1;                      { Y avanzo sólo en la 2ª }
        end;
    end;
 



17-Feb-2014 16:15
Invitado (Carlos Jurado)

Gracias profesor nacho trabajare sobre el codigo que me enseñaste hasta conseguirlo, asi me vislumbras mas mis dudas, asi entendi mas ,mil gracias profesor.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)