Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Paragonare nomi  letti da file in c++
Forum - C/C++ - Paragonare nomi letti da file in c++

Avatar
craft (Normal User)
Newbie


Messaggi: 2
Iscritto: 03/02/2010

Segnala al moderatore
Postato alle 19:37
Mercoledì, 03/02/2010
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:
Codice sorgente - presumibilmente C/C++

  1. Sia dato un file di testo contenente una sequenza di nomi.
  2.    Scrivere un programma principale che stampi a video per ogni
  3.    nome, quante volte è presente nel file.
  4.    
  5.    File di input:
  6.    {
  7.    Carlo
  8.    Pippo
  9.    Antonio
  10.    Pippo
  11.    Giovanni
  12.    Carlo
  13.    Carlo
  14.         }
  15.        
  16.    Output del programma:
  17.    {
  18.     Carlo -->presente 3 volte
  19.     Pippo -->presente 2 volte
  20.     Antonio -->presente 1 volta
  21.     Giovanni -->presente 1 volta
  22.                                 }


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:
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<fstream>
  3. #include<string.h>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    ifstream file,f;
  10.    char name[1024],name_new[1024];
  11.    int pos=0,occ=0;
  12.    file.open("names",ios::in);
  13.    cout<<endl;
  14.    while(!file.eof())
  15.    {
  16.       file>>name;
  17.       cout<<name<<"\t"<<pos<<endl;
  18.       pos++;  
  19.    }  
  20.    cout<<endl;
  21.    file.close();
  22.    file.open("names",ios::in);
  23.    f.open("names",ios::in);
  24.    do
  25.    {
  26.       file>>name;
  27.       do
  28.       {
  29.          f>>name_new;
  30.          if(strcmp(name,name_new)==0)
  31.          {
  32.             occ++;
  33.          }
  34.       }while(!f.eof());
  35.       cout<<name<<"\t"<<occ<<endl;
  36.    }while(!file.eof());
  37.    file.close();
  38.    f.close();
  39.    return 0;
  40. }


grazie mille!

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 21:49
Mercoledì, 03/02/2010
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!

PM Quote
Avatar
craft (Normal User)
Newbie


Messaggi: 2
Iscritto: 03/02/2010

Segnala al moderatore
Postato alle 21:52
Mercoledì, 03/02/2010
Ok, però, in tutta onestà non so come creare una array di stringhe....un esempio sarebbe molto gradito.
Garzie!

PM Quote
Avatar
totipianurese (Member)
Pro


Messaggi: 168
Iscritto: 24/06/2008

Segnala al moderatore
Postato alle 12:46
Venerdì, 05/02/2010
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
Codice sorgente - presumibilmente C++

  1. #include  <iostream>
  2. #include <fstream>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    string vettor[50];  //dichiarazione di un vettore (di tipo stringa) di 50 posizioni
  10.    int conta[50]; //dichiarazione di un vettore (di tipo intero) di 50 posizioni
  11.    int i,x,y,k;      
  12.    i=0;
  13.    ifstream file;
  14.    file.open("nome.txt",ios::in);
  15.    while(!file.eof())
  16.       {
  17.       getline(file,vettor[i],'\n'); //legge dal file e mette in vettor[i] i
  18.       i++;                          // caratteri letti fino al '\n' cioe' fino alla pressione del return
  19.       }  
  20.    file.close();
  21.  
  22.    for (x=0;x<=i;x++)
  23.        {
  24.         y=0;
  25.         conta[x]=0;
  26.         do
  27.         {
  28.          if (vettor[x]==vettor[y])
  29.                                 conta[x]=conta[x]+1;
  30.          y++;                      
  31.         }
  32.         while(y<=i);                        
  33.        }
  34.  
  35.    for (k=0;k<=i;k++)
  36.        {
  37.         cout << vettor[k] << " e' presente " << conta[k] << " volte" << endl;
  38.        }
  39.  
  40.    system("PAUSE");
  41. }
  42. }


Ultima modifica effettuata da totipianurese il 05/02/2010 alle 13:01
PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 18:48
Venerdì, 05/02/2010
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

PM Quote