我是C的新手并且遇到了subj。我可以用strtok
拆分字符串,但我不知道如何获得随机令牌。
感谢。
答案 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 的一个特例。