Fotocopia de una hoja de ejercicios en C: 10 céntimos.
Compilador Turbo C++ y ordenador: 1000 euros.
Ver como Pablo se pone de cansino 3 semanas con un “jodio” ejercicio, no tiene precio.
Para todo ello, soluciones Yoné.

El Pabliki tres semanas o más intentando enredar y complicar la simpleza de un ejercicio de cadena de caracteres, menos mal que estoy yo con mis ideas simples y planas para sacarlo del apuro. Aquí te dejo el programa que tantos dolores de cabezas te ha causado, reducido a su mínima expresión, ni funciones de cadena de caracteres ni pingas. Sencillo, elegante y funcional, para que veas que el ejercicio era una tontería lo que no había tenido tiempo de mirarlo.

Descargar | Código Fuente

Nota: El código fuente a descargar es una versión más depurada del código que muestro a continuación, pero sin comentarios.

C:
  1. /*Entrar una cadena desde teclado y a continuacion entrar una palabra, comprobar
  2. si la palabra esta dentro de la cadena y si es asi, sustituir esa por #, y
  3. visualizar la cadena tratada.*/
  4. #include<stdio .h>
  5. #include<conio .h>
  6. #include<string .h>
  7. #include<stdlib .h>
  8. void main ()
  9. {
  10.  char frase[100], busca[50];
  11.  char *result;
  12.  int i,j, k, inicio, fin, sw=0;
  13.  printf ("Introduce una frase : ");
  14.  gets (frase);
  15.  printf ("¿Que palabra deseas ocultar?");
  16.  gets (busca);
  17.  for(i=0;i<strlen (frase);i++)
  18.  {
  19.     //almacenamos inicio para no perderlo cuando incrementos en el segundo
  20.     //for la i
  21.     inicio=i;
  22.     for(j=0;j<strlen(busca);j++)
  23.     {
  24.         if(frase[i]==busca[j])
  25.         {
  26.             //la ultimo valor q se almacena en fin sera el indice final de busqueda
  27.             fin=i;
  28.             i++;
  29.             //conmutador para saber que hemos entrado a comparar palabra, si cuando
  30.             //terminemos el if sigue a 1 el sw es q la palabra esta encontrado
  31.             //con exito
  32.             sw=1;
  33.         }
  34.         else
  35.         {
  36.             /*si la ultima vez q entramos al bucle if en esta pasada del for
  37.             entramosen el else quiere decir q la palabra a buscar no coincide
  38.             en esta interraccion con la palabra en la frase*/
  39.             sw=0;
  40.         }
  41.     }
  42.     //podrimaos poner un solo if..pero mejor asi por claridad
  43.     if(sw==1)
  44.     {
  45.         if((frase[inicio-1]==' ' && frase[fin+1]==' ') || (inicio==0 && frase[fin+1]==' ') || (fin==strlen(frase)-1 && frase[inicio-1]==' '))
  46.         {
  47.             for(k=inicio;k<fin+1;k++)
  48.             {
  49.                 frase[k]='#';
  50.             }
  51.       }
  52.     }
  53.  }
  54.  printf ("\n%s",frase);
  55. }