Wie lesen Sie ein Wort in einer Datei in C ++?
Frage
So wurde ich das Gefühl gelangweilt und habe ich beschlossen, einen Henker Spiel machen wollte. Ich habe einen Auftrag wie dieser wieder in der High School, als ich zuerst C ++ nahm. Aber das war, bevor ich auch Geometrie, so leider habe ich auch nicht in irgendeiner Weise oder Form in ihm, und nach dem Semester ich trashed alles in einem Anfall von Wut.
Ich suche ein txt-Dokument zu machen und in einer ganzen Reihe von Worten nur werfen (Dh: Prüfung Liebe hungery flummuxed discombobulated Kuchen peinlich Sie bekommen das Idee )
hier ist also meine Frage: Wie erhalte ich C ++ ein zufälliges Wort aus dem Dokument zu lesen?
Ich habe wird ein Gefühl #include<ctime>
benötigt wird, sowie srand(time(0));
eine Art von Pseudo-Zufalls-Wahl zu bekommen ... aber ich habe nicht die leiseste, wie ein zufälliges Wort aus einer Datei genommen haben ... irgendwelche Vorschläge?
Dank der Zeit voraus!
Lösung
Hier ist eine grobe Skizze, unter der Annahme, dass die Worte von Whitespaces (Leerzeichen, Tabulator, neue Zeile, usw.) getrennt werden:
vector<string> words;
ifstream in("words.txt");
while(in) {
string word;
in >> word;
words.push_back(word);
}
string r=words[rand()%words.size()];
Andere Tipps
Der Operator >> an einer Schnur verwendet wird 1 (weiß) Raum getrennt Wort aus einem Stream lesen.
Die Frage ist also tun Sie die Datei jedes Mal, wenn Sie ein Wort wählen lesen oder wollen Sie die Datei in den Speicher geladen werden soll und dann das Wort von einer Speicherstruktur abholen. Ohne weitere Informationen kann ich nur raten.
Wählen Sie ein Wort aus einer Datei:
// 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;
}
Legen Sie eine Datei in den Speicher:
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)
);
}
Erzeugung einer Zufallszahl sollte einfach genug sein. Unter der Annahme, dass Sie nur wollen Psudo Zufall.
Ich würde empfehlen, eine einfache Textdatei (.txt) in Notepad der Erstellung und Verwendung des Standard-C-Datei-APIs ( fopen () und fread ( )) auf von ihr zu lesen. Sie können verwenden fgets () jede Zeile einer nach dem anderen zu lesen .
Wenn Sie Ihre Textdatei haben, nur jede Zeile in ein Array lesen und dann zufällig einen Eintrag im Array wählen Sie die Methode verwenden Sie oben vorgeschlagen haben.