Oppure

Loading
18/07/07 16:32
:: sara ::
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
aaa
18/07/07 18:30
WARRIOR
Bhe ipotizzando che un array chiamato ALPHA contenga dei caratteri....facciamo 21, la funzione sort() dovrebbe funzionare in questo modo.

sort(ALPHA, ALPHA+21);


Accetta come parametri l'inizio e la fine dell'array.
Correggetemi se sbaglio ;) .
aaa
18/07/07 19:27
andry89mm
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.
aaa
18/07/07 19:28
netarrow
è 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: sgi.com/tech/stl/

ciauz
aaa
18/07/07 19:29
:: sara ::
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;

}


aaa
18/07/07 19:50
WARRIOR
No, non proprio, così facendo, leggi una COSTANTE STRINGA, che (a meno che non stia sbagliando) risultareà incompatibile ;) .
Prendiamo un esempio simile al precedente.

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 :k: è utilissima :k: .
Ultima modifica effettuata da WARRIOR 18/07/07 19:53
aaa
18/07/07 20:56
:: sara ::
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 :: 18/07/07 21:06
aaa
19/07/07 9:24
netarrow
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 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 {parsed_message} e prendi anche il valore (ignoto) delle celle non ancora inizializzate; devi quindi fare così:

#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 e prendi anche il valore (ignoto) delle celle non ancora inizializzate; devi quindi fare così:

#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
aaa