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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top