Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23

    [C] Reverse di una stringa

    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;
    }
    Ultima modifica di MItaly; 22-11-2013 a 14:52 Motivo: tag CODE

  2. #2
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23
    Secondo voi è giusto implementato così ?

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    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


    Se volevi sapere altro (qualità del codice, ecc) specifica
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.