ANSI C:如何通过换行拆分字符串并获取随机行

时间:2010-02-07 17:53:01

标签: c string random strtok

我是C的新手并且遇到了subj。我可以用strtok拆分字符串,但我不知道如何获得随机令牌。

感谢。

2 个答案:

答案 0 :(得分:5)

你可以解析它两次,然后得到一个随机数并选择一个,你在同一个字符串的第二次传递中收集它。

或者,如果您使用reservoir sampling,则可以一次性完成。

掌握水库采样将是学习C作为学习一些数学的一方非常有用的方法! :)

答案 1 :(得分:2)

以下伪代码显示如何返回在字符串的标记中统一选择的候选项:

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的计算机编程艺术第二卷第3.4.2节算法R 的一个特例。