Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Torino10 en 23 Abril 2012, 18:09 pm



Título: [Ayuda] Ejercicio sencillo en C
Publicado por: Torino10 en 23 Abril 2012, 18:09 pm
Hola como están!

Les vengo con una consulta...

Tengo que hacer un programita que de acuerdo a una palabra ingresada, por ejemplo "programa", me genere una nueva palabra con todas las letras de la primera pero sin las letras que se repiten.

En el caso de la palabra "programa", la nueva seria "progam"

Y bueno despues tengo que contar la cantidad de veces que se repiten... Pero eso es sencillo...

Lo que no se como hacer es lo de guardar solo una vez las que se repiten...

No pido que me hagan la tarea, sino que me puedan dar una idea de como hacerlo...

Saludos! ;)


Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: Ferno en 23 Abril 2012, 19:35 pm
Bueno, mi idea es que uses un arreglo auxiliar.

1) Guardas la primer letra de la palabra a parsear en un arreglo auxiliar.
2) Comienza el loop: tomas la segunda letra, te fijas si aparece en el arreglo auxiliar recorriéndolo y comparándolo con tu letra actual, si no aparece, la insertas, sino, a otra cosa.

¿Está claro? Tomas una letra, recorres el arreglo auxiliar comparando cada elemento con tu letra actual. Si no aparece en el arreglo auxiliar, la insertas y haces lo mismo con las demas letras hasta acabar tu palabra. Si aparece, no insertas nada, tomas otra letra de tu palabra y continúa...


Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: Torino10 en 24 Abril 2012, 17:53 pm
Gracias por responder.

La "idea" de como hacerlo la tengo, lo que me esta costando es codificar...

Tengo esto que hice rapidamente y pero no realiza lo que quiero

Código
  1.    printf("Ingrese cadena: ");
  2.    gets(cadena);
  3.  
  4.    aux[0]=cadena[0];
  5.  
  6.    for (int i=1; i<strlen(cadena); i++)
  7.        {
  8.        for (int j=0; j<strlen(aux); j++)
  9.            {
  10.            if (cadena[i]!=aux[j])
  11.               {
  12.               aux[i]=cadena[i];
  13.               }              
  14.            }
  15.        }

El código tiene un error de lógica por lo que no esta realizando lo que quiero pero no se de que manera lo puedo hacer...
Espero que me den una ayudita mas!


Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: durasno en 24 Abril 2012, 18:46 pm
Hola! el problema es que en:
Código
  1. if (cadena[i]!=aux[j])
  2.   aux[i]=cadena[i];
no estas comparando con toda la cadena de aux sino con un caracter. Solo comparas un caracter y directamente lo guardas

Esto es lo q primero q se me ocurrio
Código
  1.    printf("Ingrese cadena: ");
  2.    gets(cadena);
  3.  
  4.    aux[0]=cadena[0];
  5.  
  6.    for (i=1; i<strlen(cadena); i++)
  7.        {
  8.              cont=0;
  9.        for (j=0; j<strlen(aux); j++)
  10.            {
  11.  
  12.            if (aux[j]!=cadena[i])
  13.               {
  14.                cont++;
  15.               }            
  16.            }
  17.            if(cont==strlen(aux)){
  18.  
  19.            aux[i-rep]=cadena[i];
  20.            }
  21.            else rep++;
  22.        }
  23. puts(aux);

Fijate si lo entendes sino pregunta,saludos


Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: maxim_o en 24 Abril 2012, 19:51 pm
Hola! el problema es que en:
Código
  1. if (cadena[i]!=aux[j])
  2.   aux[i]=cadena[i];
no estas comparando con toda la cadena de aux sino con un caracter. Solo comparas un caracter y directamente lo guardas

Esto es lo q primero q se me ocurrio
Código
  1.    printf("Ingrese cadena: ");
  2.    gets(cadena);
  3.  
  4.    aux[0]=cadena[0];
  5.  
  6.    for (i=1; i<strlen(cadena); i++)
  7.        {
  8.              cont=0;
  9.        for (j=0; j<strlen(aux); j++)
  10.            {
  11.  
  12.            if (aux[j]!=cadena[i])
  13.               {
  14.                cont++;
  15.               }            
  16.            }
  17.            if(cont==strlen(aux)){
  18.  
  19.            aux[i-rep]=cadena[i];
  20.            }
  21.            else rep++;
  22.        }
  23. puts(aux);

Fijate si lo entendes sino pregunta,saludos

Eso tampoco funcionaria, en un principio hay un par de errorcillos....
No puedes comparar con strlen(aux), por que si la cadena es de 20 y solo hay ocupados (inicializados) x posiciones la demas son aleatorios o cualquier cosa que haya en la memoria por lo que falla.... Se compara if (cont==i-rep)...
Al igual que la entrada en el segundo for tambien....
Y luego una vez termine el bucle para que la funcion puts no imprima todo lo que haya en ese array debes ponerle el caracter nulo '\0' en i-rep.


Quedaría asi:

Código
  1. #include <string.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4.  
  5. int main(){
  6. char cadena[20];
  7. char aux[20];
  8. int i;
  9. int cont=0;
  10. int j;
  11. printf("Inserte la cadena de texto: ");
  12. gets(cadena);
  13. aux[0]=cadena[0];
  14. int rep=0;
  15. for(i=1;i<strlen(cadena);i++){
  16.    for(j=0;j<(i-rep);j++){
  17.    if(cadena[i]!=aux[j])
  18.         cont++;
  19. }
  20.     if (cont==(i-rep)){
  21.        aux[i-rep]=cadena[i];
  22. }
  23.     else
  24. rep++;
  25. cont=0;
  26. }
  27. aux[i-rep]='\0';
  28. puts(aux);
  29. return(0);
  30. }
  31.  



Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: durasno en 24 Abril 2012, 21:30 pm
Lo compilast al menos??? se supone que Torino10  deberia hacer antes q nada:
Código
  1. for(i=0; i<MAX_ARREGLO;i++)
  2.    aux[i]='\0'; // asi t gusta?

Yo no subi un programa subi parte del codigo q el necesitaba

Saludos


Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: maxim_o en 24 Abril 2012, 21:47 pm
Tranquilo, no lo tomes a mal!! Solo dije que sin poner el caracter nulo fallaba y se podia solucionar de esa manera.... Torino10 según lo que puso no hacia nada de eso... por eso lo dije....
Rellenando el array de carácteres nulos si que debe funcionar.

Saludos


Título: Re: [Ayuda] Ejercicio sencillo en C
Publicado por: Torino10 en 25 Abril 2012, 18:44 pm
Gracias a los dos por la ayuda, me sirvio mucho!

El algoritmo de durasno funcionaba a la perfeccion solo que yo no hacia esto

Código
  1. for (i=0; i<20;i++)
  2.        aux[i]='\0';

Saludos! Y gracias nuevamente  :D