View Full Version : C ordinare sringhe in ordine alfabetico
Manlio93
11-02-2017, 17:51
Ciao ragazzi sto risolvendo alcuni testi di esame, sono arrivato alla parte conclusiva dell'esercizio ma non riesco a confrontare tra loro le parole, dovrei ordinarle in ordine alfabetico.
es. ho nel file: milano bologna pavia -> bologna milano pavia
Ho eseguito la lettura del file e memorizzato i nomi delle cittą in un array s[] e contato le sue righe, adesso devo prenderli da qui dentro e riordinarli. Potreste darmi una mano?
Grazie mille!
Manlio93
12-02-2017, 12:54
sono tutte minuscole le stringhe? se si allora e facile visto che i char che rappresentano i caratteri in codifica ascii sono gia' ordinati alfabeticamente. Quello che devi fare e' una funzione di confronto che dice se due stringhe passate sono alfabeticamente ordinate, non ordinate o sono uguali.
Come si fa a fare questo? la cosa piu' semplice e' iterare sui caratteri delle due stringhe finche' non ne trovi due differenti. Se arrivi in fondo le due stringhe sono uguali. A questo punto capisci qual e' l'ordine delle due stringhe e ti basta usare la funzione in un qualunque algoritmo di sort per ordinare l'array.
EDIT: puoi usare anche strcmp
ti ringrazio, per utilizzare l'ascii devo utilizzare 'r' per esempio ed esso mi darą un valore numerico?
Manlio93
12-02-2017, 15:10
non so se ho ben capito la domanda ma si. il singolo carattere racchiuso tra due singoli apici e' un alias per l'indice numerico del carattere ascii rappresentato.
Niente riesco ad attuarlo in un esercizio analogo con soli numeri, tuttavia passando con le lettere non ci riesco, questo funziona alla perfezione, che cambiamenti potrei fare utilizzando questo come base?
void ordina_ratings() {
int i, j, min;
Rating scam;
for (i = 0; i < p - 1; i++) {
min = i;
for (j = i + 1; j < p; j++)
if (rs[min].voto > rs[j].voto)
min = j;
// Scambia i due elementi
scam = rs[i];
rs[i] = rs[min];
rs[min] = scam;
}
}
Manlio93
12-02-2017, 23:09
Ho fatto questo ma mi produce questo:
void ordina(){
int i,j,k;
int tmp;
for(i=0; i<n; i++){
for(j='a'; j<'z'; j++){
if(clienti[i].anno>clienti[j].anno){
scambio(clienti+i,clienti+j);
}
}
}
for(k=0; k<n; k++){
printf("il vettore %d\n", clienti[k].anno);
}
}
edit ci sono riuscito, grazie comunque!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.