Come leggi una parola da un file in C ++?
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!
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.