2

退屈だったので、絞首刑執行人ゲームを作りたいと思いました。高校で初めて C++ を学習したとき、このような課題をやりました。しかし、これは私が幾何学を学ぶ前のことだったので、残念ながら形や形がうまくいかず、学期の後、怒り狂ってすべてを台無しにしました。

私はtxtドキュメントを作成しようとしていて、たくさんの単語を投げ込むだけです(つまり、愛の飢えをテストしてください。

そこで私の質問です: C++ にドキュメントからランダムな単語を読み取らせるにはどうすればよいですか?

ある種の疑似ランダムな選択を取得する#include<ctime>だけでなく、必要になると感じています...しかし、ファイルからランダムな単語を取得する方法について最も霧がかかっていません...何か提案はありますか?srand(time(0));

お早めにどうぞ!

4

3 に答える 3

7

以下は、単語が空白 (スペース、タブ、改行など) で区切られていると仮定した大まかなスケッチです。

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

string r=words[rand()%words.size()];
于 2009-03-09T07:07:58.030 に答える
1

文字列で使用される演算子>>は、ストリームから1(空白)で区切られた単語を読み取ります。

したがって、問題は、単語を選択するたびにファイルを読み取りたいのか、それともファイルをメモリにロードしてからメモリ構造から単語を取得したいのかということです。これ以上の情報がなければ、私は推測することしかできません。

ファイルから単語を選択します。

// 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)
             );
}

乱数の生成は簡単なはずです。疑似ランダムのみが必要だと仮定します。

于 2009-03-09T07:37:48.910 に答える
0

メモ帳でプレーン テキスト ファイル (.txt) を作成し、標準の C ファイル API ( fopen()およびfread() ) を使用して読み取ることをお勧めします。fgets()を使用して、各行を 1 つずつ読み取ることができます。

プレーン テキスト ファイルを作成したら、各行を配列に読み込み、上で提案した方法を使用して配列内のエントリをランダムに選択します。

于 2009-03-09T07:00:50.013 に答える