Newsgroup: it.comp.lang.c++
Titolo: Passaggio array stringhe

Salve, ho un problema con un programmino di ordinamento stringhe di cui vi
scrivo parte del sorgente. Ringrazio chi, gentilmente, decida di aiutarmi:
void ordina (char *stringa[], int taglia);
int minimo (char *elenco_stringhe_min[], int indice);
void swap (char *elenco_stringhe_swap[], int indice_minimo, int indice);
int main()
{
    char *elenco_stringhe[10];
    //prendo le stringhe in input e finquì tutto bene;
    ordina (elenco_stringhe,taglia);
    ......
}
//l'errore si verifica in minimo. Indice è l'indice di elenco_stringhe[] che
itero grazie ad un ciclo for nella funzione ordina. Ad ogni iterazione
richiamo minimo e swap.
int minimo (char *elenco_stringhe_min[], int indice)
{
int j = indice;
char *minim;
minim = elenco_stringhe_min[indice];
int indice_minimo = indice + 1;
for(indice_minimo; indice_minimo<10; indice_minimo++)
{
if (strcmp(elenco_stringhe_min[indice_minimo], minim)<0)
{
*minim = elenco_stringhe_min[indice_minimo];
j = indice_minimo;
}
}
return j;
}
Grazie 1000 per l'aiuto. So che per molti può essere un problema facile da
risolvere, ma siamo stati tutti principianti, no ?

 [CUT]
Uno (come me :) ) magari arriva senza molta voglia di indagare il 
problema che gli poni - pero' almeno scrivi _che_ errore si verifica, 
cosi' forse gli viene l'illuminazione subito senza bisogno di provare :)
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 
Perche' non usare una std::list di std::string
visto che si suppone tu stia programmando in C++
sono molto piu' performnatti e con tutte le funzionalita' che a te 
servono.... compreso il sort
Altro container il vector ecco un esempio trovato con google
che dovrebbe fare al caso tuo
#include <vector>       // vector class library
#include <list>		// list class library
#include <algorithm>		// STL algorithms class library
using namespace std;
...
   vector<string> vec1;
   string state1 = "Wisconsin";
   string state2 = "Minnesota";
   vec1.push_back (state1);
   vec1.push_back (state2);
   vec1.push_back ("Illinois");
   vec1.push_back ("Michigan");
   sort(vec1.begin(),vec1.end()); // Sort the vector of strings.
   vec1.erase(vec1.begin(),vec1.end());
...
   list<int> nums;
   list<int>::iterator nums_iter;
...
   nums.erase (nums.begin(), nums.end()); // Remove all elements.
...
   nums_iter = find(nums.begin(), nums.end(), 3); // Search the list.
   if (nums_iter != nums.end())
   {
     cout << "Number " << (*nums_iter) << " found." << endl;
   }
...
   // If we found the element, erase it from the list.
   if (nums_iter != nums.end()) nums.erase(nums_iter);
Ciao TD
PS.
Come consiglia Bjarne Stroustrup ;-)
-Usa le stringhe al posto del cher*
-Preferisci vector<T>, list<T> e Map<key,value> al posto di T[]


L'errore consite nel fatto che tu dentro l'if devi copiare un indirizzo, non
una stringa, ossia:
    minim = elenco_stringhe_min[indice_minimo]; << copia di un indirizzo in
un altro
infatti elenco_stringhe_min[indice_minimo]; č un char* ossia un puntatore a
stringa.
Quando tu passi il parametro char *elenco_stringhe_min[], č come se passassi
una matrice di stringhe.
Spero infatti che tu prima di ordina() abbia fatto qualcosa del genere:
char *elenco_stringhe[10]; << 10 rappresenta il numero di stringhe nella
matrice, char* č l'indirizzo della matrice
for (int i=0;i<10;i++)
        elenco_stringhe[i] = new char(max_num_caratteri_per stringa);
che alloca appunto la matrice di stringhe.
Ciao

 //Scusate, l'errore me lo da in questo punto, dicendomi che è impossibile
convertire un "char*" in un "char"


 scrivo parte del sorgente. Ringrazio chi, gentilmente, decida di aiutarmi:
Il 90% degli errori di questo tipo, improvvisamente scompaiono quando
cominci a usare le potenti classi che la stl ti mette a disposizione. Ad
esempio io usare, come altri ti hanno detto, std::list e soprattutto
std::string.
Ciao.


Scusa, pensavo d'avere fretta, invece ho trovato due minutini...
Comunque ribadisco... programmare in C++ č molto piů facile che in C, anche
se a un principiante, comprensibilmente, puň sembrare piů complesso.
Vale la pena di compiere uno sforzo e abbandonare le vecchie abitudini C (a
meno che non ci siano precisi obblighi didattici, e in questo caso saresti
nel NG, sbagliato).
Un semplice esempio, potrebbe essere...
#include <iostream>
#include <iterator>
#include <list>
#include <string>
#include <algorithm>
#include <cassert>
using namespace std;
int main()
{
        // definisce una lista di stringhe
        list<std::string> stringList;
        cout << "Inserisci stringhe (enter per terminare)...\n";
        while (true)
        {
                string temp;
                // legge una stringa da input
                getline(cin,temp);
                if (temp=="") break;
                // inserisce la stringa nella lista
                stringList.push_back(temp);
        }
        assert(!stringList.empty()); // esce brutalmente se la lista e'
vuota...
        cout << "Ordinamento " << stringList.size() << " stringhe...\n";
        // esegue il metodo sort della classe std::list
        stringList.sort();
        cout << "Scrive sull'output la lista di stringhe...\n";
        // copia sullo standard output gli elementi della lista
        // dall'inizio alla fine, essi sono elementi di tipo std::string !
        copy(stringList.begin(), stringList.end(),
                ostream_iterator<string>(cout, "\n"));
        return 0;
}