elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Ejercicio sencillo en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Ejercicio sencillo en C  (Leído 4,294 veces)
Torino10

Desconectado Desconectado

Mensajes: 56



Ver Perfil
[Ayuda] Ejercicio sencillo en C
« 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! ;)


En línea

"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #1 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...


En línea

Torino10

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #2 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!
En línea

"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #3 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
En línea

Ahorrate una pregunta, lee el man
maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #4 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.  

En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #5 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
En línea

Ahorrate una pregunta, lee el man
maxim_o

Desconectado Desconectado

Mensajes: 186


Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #6 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
En línea

Torino10

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: [Ayuda] Ejercicio sencillo en C
« Respuesta #7 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
En línea

"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda ejercicio sencillo (creo) Java
Java
Bestialazo 3 3,301 Último mensaje 29 Octubre 2007, 18:49 pm
por egyware
Ayuda con Cola en C (sencillo) « 1 2 »
Programación C/C++
Adry89 10 20,113 Último mensaje 30 Mayo 2010, 23:40 pm
por Littlehorse
ayuda con ejercicio sencillo
Programación C/C++
Fer995 2 2,324 Último mensaje 30 Octubre 2010, 16:21 pm
por Fer995
ayuda con un programa sencillo
Programación C/C++
angelina_slayer 9 4,492 Último mensaje 10 Noviembre 2010, 15:01 pm
por flony
ayuda punteros sencillo
Programación C/C++
adexrn 2 2,489 Último mensaje 1 Marzo 2012, 21:53 pm
por adexrn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines