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

    [C] Programma reverse di una stringa

    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) ?

    codice:
    #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;
    }
    Ultima modifica di MItaly; 20-11-2013 a 16:10 Motivo: Aggiunti tag CODE e tag linguaggio nel titolo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se non usi i tag CODE non ti risponderà nessuno ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Oct 2013
    Messaggi
    23
    Secondo voi funziona ??

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 © 2025 vBulletin Solutions, Inc. All rights reserved.