Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    6

    [C] Ordinamento elenco di stringhe

    Scrivere un programma che disponga in ordine alfabetico un elenco di stringhe:
    codice:
    #include <stdio.h>
    #include <string.h>
    void swap(char *ptr,char *fptr);
    
    
    int main()
    {
        
        char *tokenptr;
        char *s;
        char **matrice;
        int l,t=0,z,i,j;
        s=malloc(sizeof(char)*l);
        matrice=malloc(sizeof(char)*l*t);
        printf("inserisci i nomi da ordinare separati da uno spazio\n");
        
        gets(s);
        l=strlen(s);
       
        tokenptr=strtok(s, " ");
        while(tokenptr!=NULL){
            matrice[t]=tokenptr;
            tokenptr=strtok(NULL, " ");
            t++;
        }
        for(z=1;z<t-1;z++)
            for(j=0;j<t-1;j++)
            {
                if(strcmp(matrice[j], matrice[j+1])>0)
                    swap(matrice[j],matrice[j+1]);
            }
        
       
        
        for(i=0;i<t;i++)
        {
            printf("%s",matrice[i]);
            printf ("\n");
        }
       
        return 0;
    }
    void swap(char *px, char *py)
    {
        char temp;
        temp=*px;           
        *px=*py;
        *py=temp;
    }
    purtroppo l'output del programma non è corretto .Non riesco a capire l'errore.Grazie in anticipo
    Ultima modifica di MItaly; 08-02-2014 a 18:17 Motivo: Tag CODE, titolo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Beh, già qui

    codice:
    char **matrice;
    int l,t=0,z,i,j;
    s=(char *)malloc(sizeof(char)*l);
    matrice=(char **)malloc(sizeof(char)*l*t);
    dovresti chiarire cosa vuoi fare perché la variabile l non è mai stata valorizzata e non può essere usata.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    6
    premettendo che sono alle prime armi con il linguaggio c , vorrei allocare lo spazio per la stringa s ,l sarebbe la lunghezza della stringa (l=strlen(s))

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Scusa, anche se sei alle prime armi, come fai a misurare la lunghezza della stringa s con strlen se la stringa non esiste ancora?

    Imposterai la lunghezza massima usando una costante, non una variabile.

    Ovvero deciderai che la lunghezza massima è 100 scrivendo

    s=(char*)malloc(sizeof(char)*100);
    Ultima modifica di oregon; 07-02-2014 a 23:21
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    6
    perfetto grazie mille ! però penso ci sia qualche altro problema nel codice perchè comunque le stringhe non mi vengono ordinate

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Sicuramente ... infatti ti avevo detto "già qui" ... non ti avevo detto che quella era la sola causa.

    A questo punto perché matrice è un doppio puntatore e come viene allocata?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    6
    ho corretto anche questa allocazione perchè in effetti non aveva senso non conoscendo il valore di l e di t.
    matrice è un array bidimensionale dove inserire le varie stringhe che divido in token grazie a strtok
    quindi alloco la memoria per matrice con matrice=malloc(sizeof(char)*30*30);

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ma così ottieni un semplice puntatore ad un'area di 900 caratteri, non un puntatore a puntatori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    6
    ok grazie mille

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    6
    codice:
    #include <stdio.h>
    #include <string.h>
    #define MAX 200
    
    
    void swap(char *ptr,char *fptr);
    
    
    int main()
    {
        char *s,*tokenptr;
        char **m;
        int t=0,i,j,p,h,ordine;
        
        
        s=malloc(sizeof(char)*MAX);
        printf("inserisci i nomi separati da uno spazio\n");
        gets(s);
        m=  malloc(sizeof(char)*MAX*MAX);
        for(i=0;i<MAX;i++)
        {
            m[i]=malloc(sizeof(char)*MAX);
        }
        tokenptr=strtok(s, " ");
        while (tokenptr!=NULL) {
            sprintf(m[t], "%s",tokenptr);//memorizzo i token in m
            tokenptr=strtok(NULL, " ");
            t++;
        }
        for(p=1;p<t;p++)//ciclo per controllare i passaggi da effettuare
        {
            for(j=0;j<t-1;j++)// ciclo per controllare i confronti per ogni passaggio
            {
                ordine=strcmp(m[j], m[j+1]);
                if(ordine>0) // se strcmp ci da un maggiore positivo dobbiamo scambiare le due stringhe
                    swap(m[j], m[j+1]);//scambia le due stringhe
            }
        }
        for(h=0;h<t;h++)//stampa le stringhe
        {
            printf("%s",m[h]);
            printf(" ");
        }
        printf("\n");
        
        
        return 0;
    }
    void swap(char *ptr,char *fptr)
    {
        char temp[MAX];
        strcpy(temp, ptr);
        strcpy(ptr,fptr );
        strcpy(fptr, temp);
        
    }
    ho risolto secondo i suoi consigli ora il programma sembra funzionare..grazie mille!
    Ultima modifica di MItaly; 08-02-2014 a 18:18 Motivo: Tag CODE

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.