Autor Tema: ayuda cn un programilla  (Leído 3430 veces)

Desconectado avi_y_lau

  • Junior Member
  • **
  • Mensajes: 26
ayuda cn un programilla
« en: 24 de Noviembre de 2005, 06:41:07 pm »
pues tengo que hacer un programa que lea una frase y en ella sustituya una palabra por otra.pa que quede mas claro pongo un ejemplo.

frase original:           hola mundo
palabra a sustituir:    hola
por la palabra:         adios
frase final:              adios mundo


el caso es que yevo un par de dias y no soy capaz de sacarlo.¿alguien puede echarme una mano?
gracias
fuji finepix s5500
lentes close up

Desconectado Liamngls

  • Moderador
  • ******
  • Mensajes: 15688
    • Manuales-e
Re: ayuda cn un programilla
« Respuesta #1 en: 24 de Noviembre de 2005, 06:44:01 pm »
Sería interesante saber en que lenguaje de programación estás interesado en hacerlo :)

Desconectado avi_y_lau

  • Junior Member
  • **
  • Mensajes: 26
Re: ayuda cn un programilla
« Respuesta #2 en: 24 de Noviembre de 2005, 07:05:16 pm »
ups!!!
en c.
y el problema que tengo es que me lio a la hora de encontrar la palabra en la frase y al sustituirla xD osea en todo.
es de los primeros ejercicios que intento hacer con strings y no tengo ni pajolera idea.agradezco cualquier ayuda.jeje
fuji finepix s5500
lentes close up

Desconectado klondike

  • Iniciado
  • *****
  • Mensajes: 1652
  • Sysadmin a su servicio
    • Xisco's page
Re: ayuda cn un programilla
« Respuesta #3 en: 24 de Noviembre de 2005, 07:53:18 pm »
ups!!!
en c.
y el problema que tengo es que me lio a la hora de encontrar la palabra en la frase y al sustituirla xD osea en todo.
es de los primeros ejercicios que intento hacer con strings y no tengo ni pajolera idea.agradezco cualquier ayuda.jeje

Como pista, quizás debas buscar el caracter " ".
xiscosoft estudiantes Reflexiones klondikeñas
Gentoo FTW!
Espero haberte ayudado :-)

Desconectado avi_y_lau

  • Junior Member
  • **
  • Mensajes: 26
Re: ayuda cn un programilla
« Respuesta #4 en: 24 de Noviembre de 2005, 08:02:37 pm »
busco el primer caracter de la palabra en la frase y comparo los siguientes pero cuando todo esta comparado no se reemplazar los caracteres.
ejemplo:
frase: hola mundoweb
palabra:mundo
por:foro
 
pues en este ejmpo como no se hacerlo bien me saldria lo siguiente
   hola foroweb

no se si me explico.a ver si mañana puedo poner el codigo de lo que tengo hecho porque no lo tengo aqui ahora mismo.
gracias por el interes a todos
fuji finepix s5500
lentes close up

Desconectado klondike

  • Iniciado
  • *****
  • Mensajes: 1652
  • Sysadmin a su servicio
    • Xisco's page
Re: ayuda cn un programilla
« Respuesta #5 en: 24 de Noviembre de 2005, 10:07:13 pm »
Creo que la solución es:

Coge la frase que quieras cambiar, y cuenta los caracteres que tiene (a)
Cuenta los caracteres que hay hasta el espacio de la primera palabra que buscas (b)
Almacena en c$ los a-b caracteres que van desde b
Representa "lo que hayas cambiado" & c$

Uso la normativa basic para los variables, así que quizás no esten correctamente escritos; además esta solución esta traducida directamente de basic, así que quizás debas programar una rutina que resuelva cada paso
xiscosoft estudiantes Reflexiones klondikeñas
Gentoo FTW!
Espero haberte ayudado :-)

Desconectado jirho

  • Member
  • ***
  • Mensajes: 303
Re: ayuda cn un programilla
« Respuesta #6 en: 29 de Noviembre de 2005, 04:16:39 pm »
...gracias klondike, si, la idea es la misma:

frase original: hello mundo
palabara a cambiar: hello
por: hola

1. Busca la palabra hello en hello mundo.
2. La encontraste, estas parado en o, corres un caracter (caracter espacio) y recorres el resto de la cadena al mismo tiempo que la copias a una nueva.
3. Concatenas hola con mundo

frase final: hola mundo
...bueno, esa es la idea, por si acaso, como recorrer?: ...debes utilizar dos for anidados para recorrer y comparar las cadenas... :superman:...
[root@local_host jirho]#Conecting to underground zone...:superman:

http://www.hackeando.com/gifs/logomini.gif

Desconectado Saturn

  • Junior Member
  • **
  • Mensajes: 72
    • Space Saturn
Re: ayuda cn un programilla
« Respuesta #7 en: 30 de Noviembre de 2005, 07:25:58 pm »
Hola amigo,

He estado dándole vueltas al problema, y desempolvando un poco el tema del C, que buena falta me hacía, y he aquí el resultado:

Código: [Seleccionar]
/**************************************************************************
 +------------------------------------------------------------------------+
 |   Reemplaza.c                                                         |
 +------------------------------------------------------------------------+
 |                                                                        |
 | (c) 2005 Space Saturn (spsaturn AT terra DOT es)                       |
 |          Cedido al Foro de DaboWEB                                     |
 |                                                                        |
 | Este programa es software libre. Puedes redistribuirlo y/o modificarlo |
 | dentro de los términos de la "GNU General Public License" versión 2.   |
 |                                                                        |
 | This program is free software. You can redistribute it and/or modify   |
 | it under the terms of the GNU General Public License version 2         |
 |                                                                        |
 +------------------------------------------------------------------------+
 **************************************************************************/
 
#include <stdio.h>
#include <string.h>

   static char a[]="Hola MundoDabo";
   static char b[]="Mundo";
   static char c[]="Foro";
   static char d[80]="";
   int a_len, b_len, c_len, n, m, p, dif;
   
int main()
{
   n=0;
   dif=0;
   a_len=(int)strlen(a);
   b_len=(int)strlen(b);
   c_len=(int)strlen(c);

   printf("\n");
   printf("Cadena original: %s - Longitud: %d\n",a,a_len);
   printf("Cadena a cambiar: %s - Longitud: %d\n",b,b_len);
   printf("por: %s - Longitud: %d\n\n",c,c_len);

   do
   {
      m=0;
      p=0;
      if(a[n]==b[0])
      {
         if (comp_cad()) reemp_cad();
            else d[n-dif]=a[n];
      }
      else
      {
         d[n-dif]=a[n];
         n++;
      }
   }while (n<a_len);
   printf("Cadena modificada: %s\n\n",d);
   return 0;
}

int comp_cad()
{
   for(m=0;m<b_len;m++)
   {
      if(a[n+m]!=b[m])
      {
         return 0;
      }
      else return 1;
   }
}

int reemp_cad()
{
      for(p=0;p<c_len;p++)
      {
         d[n+p-dif]=c[p];
      }
      n+=b_len;
      dif+=b_len-c_len;
      m=0;
      return 0;
}

Verás que la frase original es: "Hola MundoDabo", y aquí se cambia "Mundo" por "Foro".

El tema está en que no podemos discriminar por palabras, ya que no hay separación entre Mundo y Dabo, así que recorrí la frase letra a letra, reemplazando el texto, y pasando de contar palabras.

Para ello, se han creado 3 variables, una para cada cadena, y una más que contendrá el resultado. Ésta en principio la he creado de tamaño 80, pero esto va a gusto del consumidor.
Y también 3 variables (int) que contienen sus respectivas longitudes.

El cuerpo principal es un bucle que recorre la frase una a una hasta que llega al final: while (n<a_len)
Si encuentra una coincidencia con la primera letra a reemplazar: if(a[n]==b[0]) salta a la función comp_cad() que se encarga de comprobar si las siguientes también coinciden.
Si es así, pasa a la función: reemp_cad() que es la que reemplazará la cadena.

Verás que hay una variable "dif". Esta se encarga de controlar la diferencia de tamaño entre la cadena a buscar y la cadena de reemplazo. En principio para esta frase no haría mucha falta, pero si probamos con texto más largo donde se repitan, entonces es imprescindible.

He tenido que tener especial atención a la actualización del valor de 'n', que es el que controla la posición "de lectura" de la frase dependiendo de lo que se ha reemplazado. Y he de reconocer que me ha traído por el camino de la amargura, jejeje. Pero ya está controlado.

Bueno, ha sido un placer, espero que te sirva de ayuda, y si tienes cualquier duda, aquí estamos.

Un abrazo!

P.D. El fuente eres libre de usarlo y modificarlo, siempre que incluyas una nota (en el fuente) indicando el autor y esta web. (Tal y como especifica la licencia GNU/GPL)
No es por nada en particular, únicamente que el trabajo que me ha costado sacarlo (algo que seguro es la mar de sencillo para muchos), sirva en beneficio del forillo, y que gane en adeptos.

Saturn
S;-D
WEB: http://spacesaturn.metropoliglobal.com
El mejor escondite, el más evidente

Desconectado jirho

  • Member
  • ***
  • Mensajes: 303
Re: ayuda cn un programilla
« Respuesta #8 en: 02 de Diciembre de 2005, 10:21:39 pm »
...gracias saturn...si le pusiste ganas...buen codigo amigo... :)...
[root@local_host jirho]#Conecting to underground zone...:superman:

http://www.hackeando.com/gifs/logomini.gif

 

Aviso Legal | Política de Privacidad | Política de Cookies

el contenido de la web se rige bajo licencia
Creative Commons License