PDA

Visualizza la versione completa : [C] Reverse di una stringa


lucasacco94
22-11-2013, 10:20
/*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;
}

lucasacco94
22-11-2013, 10:21
Secondo voi è giusto implementato così ?

Alex'87
22-11-2013, 12:45
Premesso che nessuno si leggerà quella sbrodolata di codice se non è indentato (così è illeggibile...)

Lo hai eseguito?
Hai un modo molto semplice per capire è corretto o meno:

1. Eseguilo
2.1 L'output è corretto? -> OK
2.2 L'output è errato? -> riporta gli errori e vediamo di capire cosa c'è che non va
:fagiano:

Se volevi sapere altro (qualità del codice, ecc) specifica ;)

Loading