C ++のファイルからどのように単語を読み込むのですか?

StackOverflow https://stackoverflow.com/questions/625247

  •  05-07-2019
  •  | 
  •  

質問

だから私は退屈を感じていたので、絞首刑執行人のゲームを作りたいと決めました。私が最初に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のみが必要だと仮定します。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top