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