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

Programa para separar letras, con estructura

Estas en el tema de Programa para separar letras, con estructura en el foro de C/C++ en Foros del Web. Que tal, hace poco vengo programando en C y ahora como actividad tengo que hacer un programa que lea una oracion en la que cada ...
  #1 (permalink)  
Antiguo 19/09/2015, 15:47
 
Fecha de Ingreso: septiembre-2015
Mensajes: 1
Antigüedad: 8 años, 7 meses
Puntos: 0
Pregunta Programa para separar letras, con estructura

Que tal, hace poco vengo programando en C y ahora como actividad tengo que hacer un programa que lea una oracion en la que cada una no tiene más de 100 caracteres, está formada por 8 palabras que contienen sólo mayúsculas, que tienen hasta 10 letras, y finaliza con un punto. Puede tener entre las palabras uno o más caracteres como signos de puntacion, espacios en blanco, etc.
Una vez en memoria la oración, se trata para que esté guardada cada una de sus palabras en la estructura Palabra que abajo en el codigo van a ver.
La función que programé que es "SEPARA" se invoca desde main y separa las 8 palabras y la ubicación de cada una con sus correspondientes tamaños en la estructura Palabra.
Mi problema es que dentro de la función las separa de 10 a las palabras, pero fuera con el tema de los parámetros y asignación no se guarda la palabra en la estructura.

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. struct palabra
  6. {
  7.     char pal[10]; //ahi va la palbra
  8.     int cl; // cantidad de letras de la palabra
  9.     char pal_enc[20]; // palabra encriptada, esto no va
  10. };
  11. struct palabra *separa(char*);
  12.  
  13. main()
  14. {
  15.     char letra[100];
  16.  
  17.     int i=0,r=0;
  18.     struct palabra *ap, palabr;
  19.     ap=&palabr;
  20.  
  21. while ((letra[i]=getchar()) != '.' && i<100)
  22.     {
  23.         i++;
  24.     }
  25.     letra[i] = '\0';
  26.  
  27.     for(r=0; r<2; r++)
  28.     {
  29.     ap=separa(&letra);
  30.     ap++;
  31.     }
  32.     ap=&palabr;
  33.     for(r=0; r<3; r++)
  34.     {
  35.     printf("%s ", palabr[0].pal);
  36.     ap++;
  37.     }
  38. }
  39.  
  40. struct palabra *separa(char *letra)
  41. {
  42.     static int e=0;//saber donde queda la posicion de antes
  43.     struct palabra as;
  44.     char s[10]=" ";
  45.     strcpy(as.pal, s);
  46.     int i=0, r=1, f=0;
  47.     do
  48.     {
  49.         if(letra[e]!=' ') r=0;
  50.         else e++;
  51.     }
  52.     while(r!=0);
  53.     while((i<10)&&(r==0))
  54.     {
  55.         if(((int)letra[i]>=65)&&((int)letra[e]<=90))
  56.         {
  57.         as.pal[i]=letra[e];
  58.         }
  59.         i++;
  60.         e++;
  61.         if(letra[e]==' ')
  62.         {
  63.         r=1;
  64.         as.pal[i]='\0';
  65.  
  66.         }
  67.     }
  68.     return(&as);
  69.  
  70. };

Se que le falta mucho al programa para hacer lo que pide el ejercicio pero primero necesito guardar la palabra en la estructura. Cuando ingreso cualquier oración dentro de la función si muestro la estructura está bien. Pero en el main me muestra cualquier cosa. Si alguien puede ayudar a este pobre código se lo voy a agredecer. Un abrazo.
PD: La función es así con puntero y todo porque el prototipo lo da el ejercicio.
  #2 (permalink)  
Antiguo 19/09/2015, 18:50
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Programa para separar letras, con estructura

Eso te pasa porque la estructura la creas dentro del ámbito de la función y al salir de la función se destruye. Crea la estructura en main y pasala como parámetro su puntero usando & y para asignar valores dentro en el del punto usas -> y listo. No necesitas retornar nada.

Etiquetas: caracteres, char, estructura, int, letras, programa, 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 12:08.