ciao

Allora.. vediamo se riesco a spiegarmi
il codice sotto permette all'utente di
inserire per due ipotetiche famiglie un numero tot
di nomi e ne calcola il più lungo in caratteri:

codice:
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
using namespace std;
char responso[256];
/* Prototipi di funzione */
void legginomi(string *source,int numelementi);
void visualizzanomi(string *source,int numelementi);
int leggiMassimo(string *source, int numelementi, int &max);
int Lunghezza(string source);

int main()
{
int QUANTISONO = 0;
int QUANTISONO2 = 0;
int max1, max2;
int indice1, indice2;
cout << "Quante persone ci sono nella prima famiglia?: ";
cin.getline(responso,256);
QUANTISONO = atoi(responso);
string* pNomi = new string[QUANTISONO];

cout << "Quante persone ci sono nella seconda famiglia?: ";
cin.getline(responso,256);
QUANTISONO2 = atoi(responso);
string* pNomi2 = new string[QUANTISONO2];

cout <<endl<<"Inserisci i nomi della prima famiglia:"<<endl;
legginomi(pNomi,QUANTISONO);

cout <<endl;
cout <<endl<<"Inserisci i nomi della seconda famiglia:"<<endl;
legginomi(pNomi2,QUANTISONO2);

cout << endl << "I " << QUANTISONO << " nomi che hai inserito della prima famiglia sono:" << endl;
visualizzanomi(pNomi,QUANTISONO);

cout << endl << "I " << QUANTISONO2 << " nomi che hai inserito della seconda famiglia sono:" << endl;
visualizzanomi(pNomi2,QUANTISONO2);

//calcola il nome più lungo in caratteri e visualizzazione
	indice1=leggiMassimo(pNomi, QUANTISONO, max1);
	cout<<endl<<"Il massimo della prima famiglia e': "<<max1<<" in posizione: "<<indice1+1;
	cout  << " (";
	cout << pNomi[indice1] << ")" << endl;

//calcola il nome più lungo in caratteri e visualizzazione
	indice2=leggiMassimo(pNomi2, QUANTISONO2, max2);
	cout<<endl<<"Il massimo della seconda famiglia e': "<<max2<<" in posizione: "<<indice2+1;
	cout  << " (";
	cout << pNomi2[indice2] << ")" << endl<<endl;
 
 if(max1>max2)
	{
		cout<<"il massimo tra le due famiglie e': "<< setw(3) << max1;
		cout << " (" << pNomi[indice1];
		cout << " - nella prima famiglia)" << endl<<endl;
		
	}
	else if(max1<max2)
	{
		cout<<"Il massimo tra le due famiglie e': "<< setw(4)<<max2;
		cout << " (" << pNomi2[indice2];
		cout << " - nella seconda famiglia)" << endl<<endl;
	}
	
	else if(max1==max2)
	{
		cout<<"Il massimo dei nomi delle 2 famiglie e' identico"<< endl<<endl;
	}

delete [] pNomi; //Cancella l'array dal free store
delete [] pNomi2; //Cancella l'array dal free store
pNomi = 0; //Assegna un valore null al puntatore
pNomi2 = 0; //Assegna un valore null al puntatore
system ("PAUSE");
return 0;
}
void legginomi(string *source,int numelementi)
{
for (int riga = 0; riga < numelementi; riga++)
{
cout << "Inserisci il nome #" << riga+1 << " ";
cin.getline(responso,256);
source[riga] = responso;
}
}

void visualizzanomi(string *source,int numelementi)
{
for (int riga = 0; riga < numelementi; riga++)
{
cout << source[riga] << endl;
}
}

int leggiMassimo(string *source, int numelementi, int &max)
{
	max = 0;
	int i;
	int index;
	for(i=0;i<numelementi;i++)
	{
		
		if(Lunghezza(source[i]) > max)
		{
			max=Lunghezza(source[i]);
			
			index=i;
			
		}
	}
	return index; //Ritorno l'indice del più lungo
}

int Lunghezza(string source)
{
int i=0;
int contatore=0;

	//finche' la stringa non termina
	while(source[i] != '\0')
	{
		//Se non è uno spazio
		if(source[i] != ' '&& source[i] != '_')
		{
			//Aumenta il conteggio di 1
			contatore++;
		}
		//Passa al prossimo carattere
		i++;
	}	
	//Quando ha finito ritorna il numero di caratteri trovati
	return contatore;
}
volevo implementarlo permettendo all'utente di inserire all'inizio anche
un numero variabile di famiglie, invece delle solite due fisse.
Avevo provato questo (riporto solo la parte più significativa):

cout << "Quante famiglie ci sono?: ";
cin.getline(responso,256);
quantefam = atoi(responso);
string* pNomifam = new string[quantefam];
leggifam(pNomifam,quantefam);
cout<<endl;

for (int i = 0; i < quantefam; i++)
{
cout << "Quante persone ci sono nella famiglia "<<pNomifam[i]<< "?: ";
cin.getline(responso,256);

..e qui mi sono perso.

Il problema a questo punto è che dopo aver scelto il numero di famiglie
e assegnato loro i relativi nomi, per ogni famiglia bisognerebbe creare
un array che contenga i nomi il cui numero dei membri è deciso sempre
dall'utente..riprenda cioè le funzionalità del mio programma sopra postato..
Chi mi aiuta?
grazie e ciao