ANSI C:如何按换行符分割字符串并获得随机行

发布于 2024-08-20 22:49:46 字数 88 浏览 10 评论 0原文

我是 C 语言的新手,并且被 subj 困住了。我可以用 strtok 分割字符串,但我不知道如何获取随机令牌。

谢谢。

I'm a new to C and got stuck with subj. I can split string with strtok but I don't know how to get a random token.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很糊涂小朋友 2024-08-27 22:49:46

您可以对其进行两次解析,然后获取一个随机数并选择一个,在同一字符串的第二遍中收集该随机数。

或者,如果您使用储层采样,则可以一次性完成此操作。

掌握水库采样将是学习 C 语言的一种非常有用的方法,可以作为学习数学的一个方面! :)

You can parse it twice, then get a random number and pick one, which you collect on the second pass of the same string.

Or, you can do it in a single pass if you use reservoir sampling.

Mastering reservoir sampling will be a very useful way of learning C as a side to learning some maths! :)

双马尾 2024-08-27 22:49:46

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

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 的《The Art of Computer》第 II 卷第 3.4.2 节中的算法 R 的特殊情况编程。。

The following pseudocode shows how to return a candidate uniformly selected among the tokens of the string:

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;

This is a special case of Algorithm R from section 3.4.2 of Volume II of Knuth's The Art of Computer Programming.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文