質問
だから私は退屈を感じていたので、絞首刑執行人のゲームを作りたいと決めました。私が最初にC ++を服用したとき、高校でこのような課題をやりました。しかし、これは私が幾何学になる前のことだったので、残念ながら私はその形や形でうまくいかなかったので、学期が終わった後、私は怒り狂ってすべてを捨てました。
txt文書を作成し、単語の束をすべて挿入したい (すなわち: テスト 愛 空腹 流な 離婚した パイ ぎこちない 君は 取得する その アイディア )
だからここに私の質問です: C ++でドキュメントからランダムな単語を読み取るにはどうすればよいですか?
ある種の擬似ランダム選択を得るために#include<ctime>
と同様にsrand(time(0));
が必要だと感じていますが、ファイルからランダムな単語を取得する方法については、私はあまり気にしません。 。提案はありますか?
事前に感謝します!
解決
次の大まかなスケッチは、単語が空白(スペース、タブ、改行など)で区切られていることを前提としています:
vector<string> words;
ifstream in("words.txt");
while(in) {
string word;
in >> word;
words.push_back(word);
}
string r=words[rand()%words.size()];
他のヒント
演算子<!> gt; <!> gt;文字列に使用すると、ストリームから1(空白)で区切られた単語が読み取られます。
質問は、単語を選択するたびにファイルを読みたいのか、それともメモリにファイルをロードしてからメモリ構造から単語を選択したいのかということです。これ以上の情報がなければ推測しかできません。
ファイルからWordを選択:
// 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;
}
ファイルをメモリにロードします:
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)
);
}
乱数の生成は十分に簡単なはずです。 psudo-randomのみが必要だと仮定します。
所属していません StackOverflow