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


Rispondi quotando