Wednesday, October 15, 2014

Tercer Parcialito Informática II

/*
programar una funcion:
int * datos_frase(char*)
recibe una frase y devuelve un arreglo de enteros que en cada posicion va a tener la cantidad de letras de cada palabra de la frase.
Con lo cual, si mi frace es hola mundo, va a devolver un arreglo de 2 posiciones que va a tener un 4 y un 5.
sin desperdiciar memoria.
*/


#include <stdio.h>
#include <stdlib.h>

int * datos_frase (char * frase);
int es_letra (char l);

int main()
{
    int * palabras=datos_frase("Hola Mundo!, como estan?, yo muy muy muy muy muy bien");
    printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",palabras[0],palabras[1], palabras[2], palabras[3],palabras[4],palabras[5], palabras[6], palabras[7],palabras[8],palabras[9], palabras[10], palabras[11]);
    free(palabras);
    return 0;
}
int * datos_frase (char * frase)
{
    int a=10;
    int * palabras=(int *)malloc(sizeof(int)*a);
    if(palabras==NULL)
        printf("Falta de memoria");
    char l;
    int i=0,j=0;
    int cont=0;

    do
    {
        if(es_letra(frase[i]))
        {
            cont++;
        }
        if(!es_letra(frase[i+1])&&(es_letra (frase[i])))
        {
            palabras[j]=cont;
            j++;
            if(j>=a)
            {
                a+=10;
                palabras=(int*)realloc(palabras,sizeof(int)*a);
            }
        cont=0;
        }
        i++;
    }while(frase[i]!='\0');
    palabras=(int*)realloc(palabras, sizeof(int)*(j));
    return palabras;
}
int es_letra (char l)
{
    if((l>='a'&&l<='z')||(l>='A'&&l<='Z'))
        return 1;
    else
        return 0;
}

No comments:

Post a Comment