Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2003
    Messaggi
    79

    [Dev C++] Ordinamento alfabetico di una matrice di parole con Boubble sort

    Salve a tutti,

    i realtà ho provato prima ad effettuare l'ordinamento di una matrice con sole lettere minuscole ed è tutto ok. Poi ho provato ad inizializzare la matrice iniziale con parole solo maiuscole o solo minuscole e quello che accade è che vengono effettuati due ordinamenti: prima quello alfabetico delle sole parole maiuscole, poi quello delle minuscole a seguire.

    Ho pensato a risolvere il problema con una tolower(), ma dice che vi è una conversione non valida da int to char.

    codice:
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    
    
    using namespace std;
    
    const int PAROLE=10, CARATTERI_PER_PAROLA=15; //in realtà sono 14 col carattere di terminazione stringa
    
    int ordinamento_alfabetico ( char matrice_da_ordinare[PAROLE][CARATTERI_PER_PAROLA]);
    
    int main(int argc, char *argv[])
    {
        char strarray [PAROLE][CARATTERI_PER_PAROLA] = {"allocchi", "albergoni", "cornetti", "basandri", "abbonati", "CIAO", "A", "mera", "LAURA", "gufo"};
    
    //visualizzo matrice di stringhe iniziale
    for (int i=0;i<PAROLE;i++)
        cout<< strarray[i]<<endl;
    
    //ordino alfabeticamente
    ordinamento_alfabetico (strarray);
    
    //visualizzo matrice ordinata
    cout<< endl<<endl<<endl;
    for (int i=0;i<PAROLE;i++)
        cout<< strarray[i]<<endl;
        
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    
    
    //ordinamento con algoritmo Boubble sort
    int ordinamento_alfabetico ( char matrice_da_ordinare[PAROLE][CARATTERI_PER_PAROLA])
    {
        char hold [CARATTERI_PER_PAROLA];
        char parola1[CARATTERI_PER_PAROLA], parola2[CARATTERI_PER_PAROLA];
        for(int x = 0; x < (PAROLE -1); x++) 
    {       
     for(int y = (x+1); y < PAROLE; y++)
     {       
            strcpy( parola1, tolower(matrice_da_ordinare[x]));
            strcpy( parola2, tolower(matrice_da_ordinare[y]));
             
           if(strcmp(parola1, parola2) > 0)
           {
           strcpy (hold, matrice_da_ordinare[x]);
           strcpy (matrice_da_ordinare[x], matrice_da_ordinare [y]);
           strcpy (matrice_da_ordinare[y], hold);
           }
     } 
    }
    }

    sapete il motivo di questa cosa?

    GRAZIE!!




    edit:
    PS: il seguente è il codice funzionante che esegue il doppio ordinamento corretto, perfetto se nella matrice ci sono solo parole o mauscole o minuscole

    codice:
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    
    
    using namespace std;
    
    const int PAROLE=10, CARATTERI_PER_PAROLA=15; //in realtà sono 14 col carattere di terminazione stringa
    
    int ordinamento_alfabetico ( char matrice_da_ordinare[PAROLE][CARATTERI_PER_PAROLA]);
    
    int main(int argc, char *argv[])
    {
        char strarray [PAROLE][CARATTERI_PER_PAROLA] = {"allocchi", "albergoni", "cornetti", "basandri", "abbonati", "CIAO", "A", "mera", "LAURA", "gufo"};
    
    //visualizzo matrice di stringhe iniziale
    for (int i=0;i<PAROLE;i++)
        cout<< strarray[i]<<endl;
    
    //ordino alfabeticamente
    ordinamento_alfabetico (strarray);
    
    //visualizzo matrice ordinata
    cout<< endl<<endl<<endl;
    for (int i=0;i<PAROLE;i++)
        cout<< strarray[i]<<endl;
        
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    
    
    //ordinamento con algoritmo Boubble sort
    int ordinamento_alfabetico ( char matrice_da_ordinare[PAROLE][CARATTERI_PER_PAROLA])
    {
        char hold [CARATTERI_PER_PAROLA];
        for(int x = 0; x < (PAROLE -1); x++) 
    {       
     for(int y = (x+1); y < PAROLE; y++)
     {       
             
           if(strcmp(matrice_da_ordinare[x], matrice_da_ordinare[y]) > 0)
           {
           strcpy (hold, matrice_da_ordinare[x]);
           strcpy (matrice_da_ordinare[x], matrice_da_ordinare [y]);
           strcpy (matrice_da_ordinare[y], hold);
           }
     } 
    }
    }
    "La fortuna aiuta gli audaci"
    (e non gli adagiati)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Vedi se puoi usare la strlwr (anche se non è standard).

    Oppure usi la tolower in un ciclo per ogni carattere della stringa.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.