Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Eliminar Caracteres Repetidos en S1 de S2

Estas en el tema de Eliminar Caracteres Repetidos en S1 de S2 en el foro de C/C++ en Foros del Web. Hola a todos Siento molestarlos, estuve teniendo un problema con un ejercicio. El mismo cita "Crear una funcion que elimine los caracteres de un arreglo ...
  #1 (permalink)  
Antiguo 19/09/2015, 13:24
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 11 años, 8 meses
Puntos: 7
Eliminar Caracteres Repetidos en S1 de S2

Hola a todos

Siento molestarlos, estuve teniendo un problema con un ejercicio. El mismo cita "Crear una funcion que elimine los caracteres de un arreglo s1, que coincidan con cualquier caracter de un arreglo s2".

El programa funciona parcialmente, o en otras palabras, no funciona correctamente. Borra todos los caracteres si coloco cadenas iguales (por ejemplo: AAAA, AAAA), pero si pongo cadenas con caracteres diferentes, a excepcion de uno (por ejemplo, Hola, Chau, repitiendo la letra "a"), no sucede nada.

Dejo aqui el codigo.

Código:
void squeezeb(char s[], char t[]);     
int main()
{
  
  char string1[100];
  char string2[100];
  int a, b;
  a = b = 0;
  
  fgets(string1, 100, stdin);
  fgets(string2, 100, stdin);
  
  squeezeb(string1, string2);
  
  getchar();
  return 0;
}

void squeezeb(char s[], char t[])
{
     int n, m;
     
     for(m = 0; t[n] != '\n'; m++)
     {
      
      for(n = 0; s[n] != '\n'; n++)
      {      
           if(s[n] == t[m])
           {
           s[n] = '0';
           }
           
      }
     
     }
printf("String 1\n");
puts(s);
printf("String 2 \n");
puts(t);     

}
Personalmente, creo que la variable "m", no avanza, pero no he podido demostrar esa idea o darme cuenta de que sucede.

Gracias de antemano por cualquier ayuda, realmente llevo dias con esto...
__________________
Mi pagina Web: http://www.actiweb.es/simplecreations/
Desarrollo de Juegos para PC en 2D
  #2 (permalink)  
Antiguo 19/09/2015, 19:13
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 1 mes
Puntos: 3
Respuesta: Eliminar Caracteres Repetidos en S1 de S2

Esto esta mal:
Código C:
Ver original
  1. for(m = 0; t[n] != '\n'; m++)
Usas n en lugar de m. El resultado puede ser cualquiera ya que n ni siquiera tiene valor hasta que se ejecute el segundo bucle del que saldrá con un valor igual al largo de la segunda cadena.
Además no hace lo que pide ya que ¿y si el carácter es "0"?
El truco es que si encuentra uno repetido en su lugar copie el siguiente y así hasta el final y que en el último copie '\0'.
Algo asi:
Código C:
Ver original
  1. void squeezeb(char s[], char t[])
  2. {
  3.      int n, m, j;
  4.      
  5.      for(m = 0; t[m] != '\n'; m++)
  6.      {
  7.      
  8.       for(n = 0; s[n] != '\n'; n++)
  9.       {      
  10.            if(s[n] == t[m])
  11.            {
  12.                for(j = n; s[j] != '\n'; j++)
  13.                     s[j] = s[j+1];
  14.                s[j] = '\0';
  15.                if (s[n] == '\n') break;
  16.            }
  17.            
  18.       }
  19.      
  20.      }
  21. printf("String 1\n");
  22. puts(s);
  23. printf("String 2 \n");
  24. puts(t);    
  25.  
  26. }

Lo he escrito desde el móvil basándome en tu propio código así que puede haber algún fallo pero esa es la idea.

Última edición por aguml; 19/09/2015 a las 19:49
  #3 (permalink)  
Antiguo 19/09/2015, 22:14
 
Fecha de Ingreso: agosto-2012
Mensajes: 94
Antigüedad: 11 años, 8 meses
Puntos: 7
Respuesta: Eliminar Caracteres Repetidos en S1 de S2

Gracias

Realmente me alegra saber que el error fue de tipeo.

Tienes razon con lo del 0 y con lo de colocar el siguiente, asi que implementare dichos cambios en el codigo. Me salvaste

Muchisimas gracias
__________________
Mi pagina Web: http://www.actiweb.es/simplecreations/
Desarrollo de Juegos para PC en 2D

Etiquetas: cadena, caracteres, char, funcion, int, programa, repetidos, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:54.