codice:/*Si vuole gestire una sequenza (frase) di stringhe (parole) la cui dimensione non è nota a priori. Le parole devono poter essere di lunghezza differente. Scrivere un programma C che allochi dinamicamente le informazioni descritte e che costruisca una nuova frase in cui l'ordine delle parole sia invertito (ad esempio, la frase “Che bella giornata” diviene “giornata bella Che”) lavorando con i puntatori a parola. Il programma deve visualizzare la frase prima e dopo la trasformazione.*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_CHAR 2000 int main() { int i=0; int n_elementi=0; int n_lettere=0; int flag=0; char temp_frase[MAX_CHAR]; char *matrice; char **vettore; printf("Inserisci una frase.\n"); fgets(temp_frase,MAX_CHAR, stdin); flag=0; n_elementi=0; for(i=0;i<MAX_CHAR && flag != 1; i++) { if(temp_frase[i]=='\0') flag=1; else{ if( temp_frase[i]!=' ' && (temp_frase[i+1]==' ' || temp_frase[i+1]=='\n')) { n_elementi++; } } } printf("%d\n", n_elementi); vettore=(char**)malloc(sizeof(char*)*n_elementi); /*creo le righe nella matrice */ printf("fatto\n"); // matrice=strtok(temp_frase, " "); /* frase=(char**)malloc(sizeof(char*)*contaParole); for(i=0, *(frase+i)=strtok(fraseAppoggio," \n"); *(frase+i)!=NULL; i++, *(frase+i)=strtok(NULL," \n")) { printf("%s ", *(frase+i)); } */ for(i=0, matrice=strtok(temp_frase, " \n") ; matrice!=NULL; matrice=strtok(NULL, " \n"), i++ ) { n_lettere=strlen(matrice); // printf("n_lettere=%d\n", n_lettere); if ((vettore[i]=(char*)malloc(sizeof(char)*n_lettere))!=NULL) { //vettore[i]=(char*)malloc(sizeof(char)*n_lettere); strcpy(*(vettore+i), matrice); printf("strlen(vet)=%d\tstrlen(mat)=%d\tvet=%s\tmat=%s\n", strlen(vettore[i]), strlen(matrice),vettore[i],matrice); //printf("%s ", *(vettore+i)); }else { printf("non c'è abbastanza spazio per allocare la memoria"); } } /* i=0; while( matrice != NULL ) { n_lettere=strlen(matrice); vettore[i]=(char*)malloc(n_lettere* sizeof(char));/*facendo cosi creo una matrice con colonne=n_lettere*/ /* strcpy(vettore[i], matrice); /* copio il valore di matrice nella riga i della*/ /* matrice=strtok(NULL, " "); /* prendo la parola sucessiva */ /* i++; } */ printf("\nMATRICE NORMALE.\n"); for (i=0; i<n_elementi; i++) { printf("%s ", vettore[i]); } printf("\n\nMATRICE REVERSATA.\n"); for (i=n_elementi-1; i>=0; i--) { printf("%s ", vettore[i]); } printf("\n\n"); for(i=0; i<n_elementi; i++) { free(vettore[i]); } system("pause"); return 0; }