ANSI C:どのように改行で文字列を分割し、ランダムな行を取得します

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

  •  19-09-2019
  •  | 
  •  

質問

私はCに新たなんだとSUBJで捕まってしまいました。私はstrtokで文字列を分割することができますが、私は、ランダムなトークンを取得する方法を知りません。

感謝します。

役に立ちましたか?

解決

あなたは同じ文字列の2回目のパスで収集され、乱数を取得し、1を選択、その後、二度それを解析することができます。

それとも、あなたは貯留サンプリングを使用する場合は、単一のパスでそれを行うことができます。

リザーバーサンプリングをマスターすることは、いくつかの数学を学習する側としてCを学ぶのに非常に便利な方法になります! :)

他のヒント

次の擬似コードは、一様に、文字列のトークンのうち選択された候補を返す方法を示しています。

string result = null;
int tokens = 0;
while (true) {
  string candidate = next token;
  if (candidate does not exist) break;
  tokens = tokens + 1;
  if ((a random integer selected between 0 and tokens-1) == 0) result = token;
}
return result;

これは、KnuthのコンピュータプログラミングののアートののボリュームIIのセクション3.4.2からのアルゴリズムR の特殊なケースです。

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