PDA

Visualizza la versione completa : [C] Programma reverse di una stringa


lucasacco94
20-11-2013, 13:19
Ecco qua il problema:
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.



La mia soluzione Ŕ questa: (Secondo voi , gentili utenti, questo codice Ŕ esatto per questo tipo di problema) ?



#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++;
}
}
}


vettore=(char**)malloc(sizeof(char*)*n_elementi); /*creo le righe nella matrice */

// 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);
}
}
/* 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;
}

oregon
20-11-2013, 13:25
Se non usi i tag CODE non ti risponderÓ nessuno ...

lucasacco94
21-11-2013, 09:55
Secondo voi funziona ??

Loading