[c++] Estrarre una riga random da un file di testo

di il
4 risposte

[c++] Estrarre una riga random da un file di testo

Salve a tutti,

ho un problema con un programma che dovrei usare per estrarre e stampare su schermo una riga random da un file di testo. Ho scritto questo, tuttavia non funziona. Se mi aiutaste a trovare il bug ve ne sarei grato, grazie mille.

#include <iostream> 
#include <cstdlib> 
#include <windows.h> 
#include <fstream> 

using namespace std ; 



string riga_random(string autore, string file); 
int counter(string file); 

int counter(string file) 
{  
  ifstream f(file.c_str()); 
    string s; 
    int n ; 
    n = 0 ; 
    while(f.good()) //fino a quando c'è qualcosa da leggere .. 
    { 
        //legge tutta la riga dal file e la mette nella variabile s 
        getline(f, s); 
        n++ ; 
        //cout<<s<<endl; 
    } 
     return n ; 
     f.close(); //chiude il file 
} 
string riga_random(string file) 
{ 
       int n_riga, n_righe ; 
       n_righe = counter(file.c_str()) ; 
       n_riga = rand() % n_righe ; 
       ifstream f(file.c_str()); 
       int i; 
        
       string s ; 

       while ( i < n_riga ) 
       {      
             i = 1 ; 
             getline (f,s) ; 
             i++ ; 
              
             } 
           return s ;    
       } 
int main() 
{    
    string s; 
    s = riga_random("Quotes.txt"); 
    cout<< s; 
    system("PAUSE"); 
    return 0; 
} 


Vi allego anche due screenshoot del file di testo e del sorgente compilato:

- File di testo



- File compilato (n pratica vedo solo un puntatore lampeggiante)

4 Risposte

  • Re: [c++] Estrarre una riga random da un file di testo

    Perche leggi il file 2 volte? Lo leggi una volta sola e tieni tutte le stringhe in un vettore. Poi estrai random una riga dal vettore.
  • Re: [c++] Estrarre una riga random da un file di testo

    La prima volta mi serve per contare il numero di righe. La seconda volta prendo un numero random limitatamente al numero di righe esistenti e associo la riga al numero. Come dovrei fare per fare come hai detto tu?
  • Re: [c++] Estrarre una riga random da un file di testo

    
    std::vector<std::string> righe;
    while(f.good()) //fino a quando c'è qualcosa da leggere ..
        {
            //legge tutta la riga dal file e la mette nella variabile s
            getline(f, s);
            righe.push_back(s) ;
            //cout<<s<<endl;
        } 
    
    .... 
    
    il vettore tiene tutto il file, 1 cella tiene una riga.
    righe.size() tiene il numero delle righe.
    
    int riga = rand() % righe.size();
    
    .....
    questo ti ritorna la riga scelta random prima.
    return righe[riga];
    
  • Re: [c++] Estrarre una riga random da un file di testo

    Figo, provo a usarlo! Grazie ti faccio sapere!
Devi accedere o registrarti per scrivere nel forum
4 risposte