• Sábado 14 de Diciembre de 2024, 18:04

Autor Tema:  Eliminar Cadena De Un Texto  (Leído 3361 veces)

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Eliminar Cadena De Un Texto
« en: Jueves 3 de Enero de 2008, 03:28 »
0
hi quiero eliminar una cadena de un texto pero sin usar funciones de string como strstr y eso yo use un codigo fuente que encontre por la red pero lo unico que hago es poner espacio donde se encontraba la cadena, pero quiero eliminar esa cad asi corro lo que queda de la cadena.
aca dejo algunos codigo fuente de muestra -_-.

quiero que quede como este codigo pero en ves de borrar 1 caracter y correr la cadena, elimine esa cadena y se corra en ese lugar lo que queda de texto.
Código: Text
  1.  
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include<string.h>
  5.  
  6. int main (void)
  7. {
  8.  char cad[2][20],c;
  9.  
  10.  for(int x=0;x<2;x++)
  11.  {
  12.     printf ("Introduce palabra: ");
  13.     gets (cad[x]);
  14.  }
  15.  
  16.  printf ("caracter ");
  17.  scanf("%c",&c);
  18.  
  19.   for(int j=0; j<2; j++)
  20.   {
  21.     for(int k=0; k<strlen(cad[j]); k++)
  22.     {
  23.        if(cad[j][k]==c)
  24.       {
  25.          for(int w=k+1; w<=strlen(cad[j]); w++)
  26.             cad[j][w-1] = cad[j][w];
  27.           k--;
  28.       }
  29.     }
  30.   }
  31.  
  32.   for(int z=0;z<2;z++)
  33.     printf(" %s \n",cad[z]);
  34.  
  35.   getch();
  36.  
  37.   return 0;
  38. }
  39.  
  40.  

este es el trucho que le pongo espacio

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

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Eliminar Cadena De Un Texto
« Respuesta #1 en: Sábado 5 de Enero de 2008, 00:22 »
0
hi al final lo deje como taba con funcion strstr porque me fije como era esa funcion para buscar cadena y es mucho lio -_- mm no hay otra forma + facil

codigo funcion strstr(buscar cadenas)
Código: Text
  1.  
  2. Las siguientes funciones NO usan funciones de string.h
  3.  
  4. Código:int longitud(char *cadena)
  5. {
  6.    int i = 0;
  7.  
  8.    while(cadena[ i ]!='\0')
  9.         i++;
  10.  
  11.    return i;
  12. }
  13.  
  14. int verificar(char *cadena, char *subcadena)
  15. {
  16.     int i, j;
  17.     int l_cadena = longitud(cadena);
  18.     int l_subcadena = longitud(subcadena);
  19.  
  20.     if(l_cadena < l_subcadena)
  21.       return 0;
  22.     if(cadena[ 0 ]=='\0' && subcadena[ 0 ]=='\0')
  23.        return 1;
  24.  
  25.     for(i=0; i < l_cadena; i++)
  26.        if(cadena[ i ]==subcadena[ 0 ])
  27.        {
  28.            if(l_cadena-i < l_subcadena)
  29.               return 0;
  30.  
  31.             for(j=0; j < l_subcadena; j++)
  32.                  if(cadena[ i+j ]!=subcadena[ j ])
  33.                     break;
  34.  
  35.             if(j==l_subcadena)           j==null
  36.                return 1;     break;
  37.        }
  38.  
  39.  
  40.  
  41.           while(si)
  42.           pos=j-cad;
  43.     return 0;
  44. }
  45.  
  46.  

codigo para eliminar cadena de un texto

Código: Text
  1.  
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. void main(void)
  7. {
  8.    char renglon[50];
  9.    char cad[50];
  10.    char palabras[50][50];
  11.    int cont=0;
  12.    printf("Ingrese frase ");
  13.    fflush(stdin);
  14.    gets(renglon);
  15.    printf("cadena a eliminar ");
  16.     fflush(stdin);
  17.    gets(cad);
  18.  
  19.   int i, j=0;
  20.  
  21.   for(i=0; i<strlen(renglon); i++)
  22.   {
  23.      /* Si es un caracter distinto de espacio y salto de linea */
  24.      if(renglon[i]!=' ' && renglon[i]!='\n')
  25.      {
  26.       palabras[cont][j] = renglon[i];
  27.       j++;
  28.  
  29.           /* Si el caracter siguiente es fin de cadena */
  30.           if(renglon[i+1]=='\0')
  31.       {
  32.         palabras[cont][j] = '\0'; /* Indica fin de palabra */
  33.         cont++; /* Aumenta el numero de palabras */
  34.         j=0;
  35.       }
  36.      }
  37.      /* Si es espacio o salto de linea */
  38.      else if(renglon[i]==' ' || renglon[i]=='\n')
  39.      {
  40.        /* Si el caracter anterior no es espacio ni salto de linea */
  41.       if(i>0 && renglon[i-1]!=' ' && renglon[i-1]!='\n')
  42.       {
  43.         palabras[cont][j] = '\0'; /* Indica fin de palabra */
  44.         cont++; /* Aumenta el numero de palabras */
  45.         j=0;
  46.       }
  47.     }
  48.   }
  49.  
  50.   char *pdest;
  51.   int pos, len, total;
  52.   int x;
  53.  
  54.   total = strlen(renglon);
  55.   len = strlen(cad)+1;
  56.  
  57.   while(1)// recorre cadena busca de cadena a eliminar si no encuentra nada se muestre la cadena como se ingreso
  58.   {
  59.     pdest = strstr( renglon, cad);
  60.     if( pdest == NULL )   //no encuentra nada sale del programa
  61.     break;
  62.  
  63.     pos = pdest - renglon; // no entiendo que resta ahi me lo pueden explicar
  64.  
  65.     for(x=pos+len; x<=total; x++)
  66.       renglon[x-len] = renglon[x];    // esto tambien -_-
  67.   }
  68.    printf("%s", renglon);
  69.   getch();
  70. }
  71.  
  72.