Domanda

Quindi mi sentivo annoiato e ho deciso che volevo fare un gioco dell'impiccato. Ho fatto un incarico come questo al liceo quando ho preso il C ++ per la prima volta. Ma questo era ancora prima che io stessi troppo geometria, quindi purtroppo non ho fatto bene in alcun modo forma o forma in esso, e dopo il semestre ho buttato tutto in un impeto di rabbia.

Sto cercando di creare un documento txt e di inserire solo un mucchio di parole (Es: test amore hungery flummuxed discombobulated torta scomodo tu ottenere il idea )

Quindi, ecco la mia domanda: Come posso ottenere C ++ per leggere una parola a caso dal documento?

Ho la sensazione che #include<ctime> sarà necessario, così come srand(time(0)); per ottenere una sorta di scelta pseudocasuale ... ma non ho il più nebuloso su come avere una parola casuale presa da un file .. .che suggerimenti?

Grazie in anticipo!

È stato utile?

Soluzione

Ecco uno schizzo approssimativo, supponendo che le parole siano separate da spazi bianchi (spazio, tabulazione, nuova riga, ecc.):

vector<string> words;
ifstream in("words.txt");
while(in) {
  string word;
  in >> word;
  words.push_back(word);
}

string r=words[rand()%words.size()];

Altri suggerimenti

L'operatore > > usato su una stringa leggerà 1 parola (bianca) separata dallo spazio da un flusso.

Quindi la domanda è: vuoi leggere il file ogni volta che scegli una parola o vuoi caricare il file in memoria e poi prendere la parola da una struttura di memoria. Senza ulteriori informazioni posso solo immaginare.

Scegli una parola da un file:

// Note a an ifstream is also an istream. 
std::string pickWordFromAStream(std::istream& s,std::size_t pos)
{
    std::istream_iterator<std::string> iter(s);
    for(;pos;--pos)
    {    ++iter;
    }

    // This code assumes that pos is smaller or equal to
    // the number of words in the file
    return *iter;
}

Carica un file in memoria:

void loadStreamIntoVector(std::istream& s,std::vector<std::string> words)
{
    std::copy(std::istream_iterator<std::string>(s),
              std::istream_iterator<std::string>(),
              std::back_inserter(words)
             );
}

Generare un numero casuale dovrebbe essere abbastanza facile. Supponendo che tu voglia solo psudo-casuale.

Vorrei raccomandare di creare un file di testo semplice (.txt) in Blocco note e di utilizzare le API del file C standard ( fopen () e fread ( ) ) da leggere. Puoi utilizzare fgets () per leggere ogni riga una alla volta .

Una volta che hai il tuo file di testo semplice, leggi ogni riga in un array e quindi scegli una voce nell'array in modo casuale usando il metodo che hai suggerito sopra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top