3er parcialito

2
/* 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) {

Upload: alvin-jacobs

Post on 27-Jul-2015

80 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: 3er parcialito

/* 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) {

Page 2: 3er parcialito

if((l>='a'&&l<='z')||(l>='A'&&l<='Z')) return 1; else return 0; }