Fstrem con stringhe

di Anonimizzato11938 il
47 risposte

47 Risposte - Pagina 3

  • Non so se ho capito bene o no, cmq ho fatto in questo modo ...

    #include<iostream>
    #include<cstdlib>
    #include<string.h>
    #include<fstream>
    #define N 100
    
    typedef char stringa[N];
    typedef stringa vettore[N];
    using namespace std;
    
    void input(int&n, vettore v);
    void stampa(int n, vettore v);
    void massimo(int n, vettore v, int&max, int&imax);
    void sostituzione(int n, vettore v, int max, int imax);
    
    void input(int&n, vettore v){
         int i=0;
         fstream f;
         f.open("Lista Pazienti.txt",ios::in);
         while(!f.eof()){
                                          f>>v[i];
                                          i++;
                                          n=i;
                                          }
                                          }
                                          
                                          
    void stampa(int n, vettore v){
         int i;
         cout<<"La lista dei pazienti e':"<<endl;
         for(i=0;i<n;i++){
                          cout<<v[i]<<endl;
                          }
                          }
                          
    void ripetizione(int n, vettore v, int&cont, stringa s){
         int i;
         cont=0;
         cout<<"Inserisci il cognome che vuoi cercare:"<<endl;
         cin>>s;
         for(i=0;i<n;i++){
                          int esito=strcmp(v[i],s);
                          if(esito==0){
                                       cont++;
                                       }
                                       }}
                                       
    void massimo(int n, vettore v, int&max, int&imax){
         int i;
         max=strlen(v[0]);
         imax=0;
         for(i=0;i<n;i++){
                          if(strlen(v[i])>max){
                                               max=strlen(v[i]);
                                               imax=i;
                                               }
                                               }}
                                               
    void sostituzione(int n, vettore v, int max, int imax){
         fstream f;
         int i;
         for(i=0;i<n;i++){
                         if(strlen(v[i])<=5){
                                            strcpy(v[i],v[imax]);
                                            }
                                            f<<v[i]<<endl;
                                            }
                                            f.close();
                                            }
                                               
    int main(){
        int i,n;
        vettore v;
        stringa s;
        fstream f;
        int cont=0;
        int max,imax;
        
        input(n,v);
        stampa(n,v);
        ripetizione(n,v,cont,s);
        cout<<"Il cognome"<<" "<<s<<" "<<"e' presente"<<" "<<cont<<" "<<"volte nella lista dei pazienti!"<<endl;
        massimo(n,v,max,imax);
        cout<<endl<<"Il cognome piu' lungo e':"<<endl<<v[imax]<<endl;
        sostituzione(n,v,max,imax);
        cout<<"La lista in seguito alle ultime modifiche e':"<<endl;
        for(i=0;i<n;i++){
                         cout<<v[i]<<endl;
                         }
        
        system("PAUSE");
        return 0;
    }
        
         
    
    ..ma mi dà sempre lo stesso problema
  • Lo stesso problema quale? A me scrive il file con i nuovi dati.

    Fai un esempio specifico dei dati in input e dell'output che ottieni (e che invece dovresti ottenere)
  • MMMM allora ...

    Il file "Lista Pazienti" inizialmente contiene la lista:

    Edoardo
    Vincenza
    Alessia
    Vincenza
    Piero

    dopo la modifica mi esce a video :

    Edoardo
    Vincenza
    Alessia
    Vincenza
    Vincenza

    ..però se dopo aver eseguito il programma apro il file, la lista è sempre:

    Edoardo
    Vincenza
    Alessia
    Vincenza
    Piero
  • Ho provato l'ultimo codice e ottengo i dati corretti

    Edoardo
    Vincenza
    Alessia
    Vincenza
    Vincenza
  • Va bene, allora forse è un problema del mio pc ! anche perchè quando eseguo i programmi si apre continuamente avast ...spesso me li interrompe !
    cmq grazie della pazienza, so che è stata dura con me ! XD
  • Non credo ad un problema del PC ...

    Cancella tutti i file dati e riprova con altri dati.
  • Fatto ! non vuole proprio andare !
  • Quale ambiente/compilatore usi?
  • Uso il Dev-C++ !
  • Anche se è il peggiore, comunque il codice funziona anche con quello (ovviamente l'ho provato).

    Mi posti l'ultima versione (quella che utilizzi) della funzione sostituzione?
  • Certo ! Eccola qua:
    void sostituzione(int n, vettore v, int max, int imax){
         fstream f;
         int i;
         f.open("Lista Pazienti.txt",ios::out);
         for(i=0;i<n;i++){
                         if(strlen(v[i])<=5){
                                            strcpy(v[i],v[imax]);
                                            }
                                            f<<v[i]<<endl;
                                            }
                                            f.close();
                                            }
  • Ok, funziona ...

    Quindi

    1) o non hai ricompilato il programma l'ultima volta che l'hai modificato

    2) oppure il problema sta da un'altra parte ma non nel codice

    Se vuoi, per chiudere, puoi farmi scaricare in un file .zip, tutti i file del progetto (compresi il file dati e l'eseguibile) per provare nel mio computer.
  • Nono, faccio sempre "compila ed esegui", quindi il problema non è quello ...
    per quanto riguarda il file zip ...come potrei inviartelo ?
  • Mettilo in un'area gratuita da cui poterlo scaricare ... (anche dropbox ...)
Devi accedere o registrarti per scrivere nel forum
47 risposte