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);
       }
 } 
}
}