:: sara :: (Normal User)
Newbie
Messaggi: 5
Iscritto: 18/07/2007
|
ciao!
come si fa ad ordinare un array di caratteri in ordine alfabetico?!
premetto che i caratteri non comprendono nè numeri nè spazi nè maiuscole...solo semolici lettere minuscole!
mi hanno consigliato di usare sort ma non so come si usa!!!
grazie
|
|
WARRIOR (Ex-Member)
Guru
Messaggi: 627
Iscritto: 30/03/2007
|
Bhe ipotizzando che un array chiamato ALPHA contenga dei caratteri....facciamo 21, la funzione sort() dovrebbe funzionare in questo modo.
Codice sorgente - presumibilmente Plain Text |
Accetta come parametri l'inizio e la fine dell'array.
Correggetemi se sbaglio .
|
|
andry89mm (Member)
Pro
Messaggi: 128
Iscritto: 21/12/2006
|
Ciao, posso consigliarti di guardare nella sezione Algoritmi di questo forum ; ci sono dei topic che spiegano appunto vari tipi di algoritmi di ordinamento.Sono scritti in pseudo-codifica ma semplici da "portare" in C++ ;
se incontri problemi nel porting chiedi qui.
|
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
è giusto è giusto ;-)
Cmq consiglio all'original poster di farsi bene la STL, per chi vuole usare in modo proficuo il C++ senza "rischiare" di mescolare i programmi C++ con funzioni C quando non necessario rendendo tutto più fragilino, bacato e complicato è bene studiarla tutta.
Una documentazione qui: http://www.sgi.com/tech/stl/
ciauz
|
|
:: sara :: (Normal User)
Newbie
Messaggi: 5
Iscritto: 18/07/2007
|
ok...quindi tu mi stai dicendo di fare una cosa del genere????
int main ()
{
char stringa_A [10];
std::cout << "inserisci la stringa da elaborare ";
std::cin >> stringa_A;
sort (stringa_A,stringa_A+10);
std::cout << stringa_A;
system("pause");
return 0;
}
|
|
WARRIOR (Ex-Member)
Guru
Messaggi: 627
Iscritto: 30/03/2007
|
No, non proprio, così facendo, leggi una COSTANTE STRINGA, che (a meno che non stia sbagliando) risultareà incompatibile .
Prendiamo un esempio simile al precedente.
Codice sorgente - presumibilmente C/C++ |
int num[2], i; //un array di int
num[0] = 3; //inserisco i numeri in senso inverso
num[1] = 2;
num[2] = 1;
/*
Se stampi l'array con un ciclo,
l'output visualizzarà
3 2 1
*/
sort(num,num+2);
for(i = 0; i < 3; i++) {
cout << num[i];
}
/*
ora il programma scriverà 1 2 3
*/
|
Cmq, segui il consiglio di Matteo, studia bene la Standard template Library è utilissima .
Ultima modifica effettuata da WARRIOR il 18/07/2007 alle 21:53 |
|
:: sara :: (Normal User)
Newbie
Messaggi: 5
Iscritto: 18/07/2007
|
quindi dovrebbe essere questo il risultato...
int main ()
{
int i;
char stringa_A[10];
std::cout << "inserisci la stringa da elaborare ";
std::cin >> stringa_A;
std::sort (stringa_A, stringa_A + 10);
for (i=0;i<10;i++)
{std::cout << stringa_A;}
system("pause");
return 0;
}
non so...ho ancora qualche dubbio...
io sto parlando di array di caratteri...
non so se funziona...
che dite???
Ultima modifica effettuata da :: sara :: il 18/07/2007 alle 23:06 |
|
netarrow (Admin)
Guru^2
Messaggi: 2502
Iscritto: 12/05/2004
|
la sort funziona anche su array di carattere, l'errore che hai fatto li è che tu passi il primo puntatore e va bene, e dopo l'ultimissimo, ovvero quello 10 dopo, che va bene solo se effetivamente la stringa riempie tutti e 10 i posti.
Quindi visto che vengono inseriti dall'utente e su 10 posti può riempirne di meno se tu ordini per intero lo stesso tutto vai oltre il carattere \0 e prendi anche il valore (ignoto) delle celle non ancora inizializzate; devi quindi fare così:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <algorithm> using namespace std; int main () { char stringa_A[10]; cout << "Inserisci la stringa da elaborare: "; cin >> stringa_A; sort(stringa_A, stringa_A + strlen(stringa_A)); cout << stringa_A << endl; system("pause"); return 0; }
|
ciao
|
|
:: sara :: (Normal User)
Newbie
Messaggi: 5
Iscritto: 18/07/2007
|
grazie a tutti per l'immenso aiuto!!!
ciao ciao
|
|