ANSI C:どのように改行で文字列を分割し、ランダムな行を取得します
質問
私は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 の特殊なケースです。
所属していません StackOverflow