Oppure

Loading
03/02/10 18:37
craft
Ciao a tutti, sono nuovo. Sono un principiante della programmazione e avrei bisogno del vostro aiuto.
Ho un esercizio da svolgere, il testo è il seguente:
Sia dato un file di testo contenente una sequenza di nomi.
   Scrivere un programma principale che stampi a video per ogni
   nome, quante volte è presente nel file.
   
   File di input:
   {
   Carlo
   Pippo
   Antonio
   Pippo
   Giovanni
   Carlo
   Carlo
        }
        
   Output del programma:
   {
    Carlo -->presente 3 volte
    Pippo -->presente 2 volte
    Antonio -->presente 1 volta
    Giovanni -->presente 1 volta
                                }

ho fatto numerosissime prove prima di postare qui ma probabilmente non mi sono chiari dei concetti. Potreste aiutarmi magari con del codice commentato?
Ecco cosa ho scritto io e che ovviamente non va:
#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

int main()
{
   ifstream file,f;
   char name[1024],name_new[1024];
   int pos=0,occ=0;
   file.open("names",ios::in);
   cout<<endl;
   while(!file.eof())
   {
      file>>name;
      cout<<name<<"\t"<<pos<<endl;
      pos++;   
   }   
   cout<<endl;
   file.close();
   file.open("names",ios::in);
   f.open("names",ios::in);
   do
   {
      file>>name;
      do
      {
         f>>name_new;
         if(strcmp(name,name_new)==0)
         {
            occ++;
         }
      }while(!f.eof());
      cout<<name<<"\t"<<occ<<endl;
   }while(!file.eof());
   file.close();
   f.close();
   return 0;
}

grazie mille!
aaa
03/02/10 20:49
giuseppe93
il primo consiglio che ho da darti è di utilizzare le variabile stringe per salvare i nomi letti, anche perchè il tuo metodo non è efficace. quindi salvi tutti i nomi in un array di di stringhe (visto che siamo in c++ perchè non usarle?) poi ripeti il ciclo while e compari ogni nome che leggi con quello contenuto della variabile string... questà può essere una soluzione, non è la migliore ma funziona!
aaa
03/02/10 20:52
craft
Ok, però, in tutta onestà non so come creare una array di stringhe....un esempio sarebbe molto gradito.
Garzie!
aaa
05/02/10 11:46
totipianurese
craft eccomi un mio semplice esempio. Il problema che ora dovrai risolvere tu ora e' solo la stampa. (cmq funziona lo stesso).
Inoltre Note bene, che il mio codice, funziona solo qualora il file che dai in input e costituito in questo modo:
salvatore
mario
luca
mario
Cioe' ogni nome presente nel file deve stare su un'unica riga
#include  <iostream>
#include <fstream>
#include <string.h>

using namespace std;

int main()
{
   string vettor[50];  //dichiarazione di un vettore (di tipo stringa) di 50 posizioni
   int conta[50]; //dichiarazione di un vettore (di tipo intero) di 50 posizioni
   int i,x,y,k;       
   i=0;
   ifstream file;
   file.open("nome.txt",ios::in);
   while(!file.eof())
      {
      getline(file,vettor[i],'\n'); //legge dal file e mette in vettor[i] i
      i++;                          // caratteri letti fino al '\n' cioe' fino alla pressione del return
      }  
   file.close();
  
   for (x=0;x<=i;x++)
       {
        y=0;
        conta[x]=0;
        do
        {
         if (vettor[x]==vettor[y])
                                conta[x]=conta[x]+1;
         y++;                      
        }
        while(y<=i);                        
       }
  
   for (k=0;k<=i;k++)
       {
        cout << vettor[k] << " e' presente " << conta[k] << " volte" << endl;
       }
  
   system("PAUSE");
} 
}
Ultima modifica effettuata da totipianurese 05/02/10 12:01
aaa
05/02/10 17:48
giuseppe93
non sarebbe meglio non dare subito il codice già bello e pronto??:nono:
poi non è del tutto esatto come programma... almeno la correzione lasciamola fare a craft
aaa