我正在尝试为我的程序自动化测试用例,我想生成随机字符串来测试...首先测试将使用基数2,所以我想生成0和1,随机长度n,其中n是从1到100.这是我到目前为止所做的,并且它不断返回相同的字符串,(相同的长度)并且只为字符串的整个长度生成1或0。 / p>
int digNum = rand() % 100 + 1;
int num;
for(int i = 0; i < digNum; i++) {
num = ((double) rand() / (RAND_MAX)) + 1;
s1 = s1 + to_string(num);
}
cout << s1 << endl;
思想?
答案 0 :(得分:3)
首先你应该初始化生成器,例如:
srand(time(NULL));
有了这个,你将确保每次都不会得到相同的数字。
为了从范围生成数字,您应该尝试:
rand() % (max + 1 - min) + min
答案 1 :(得分:3)
或者,如果您使用的是C ++ 11或更高版本,则可以使用<random>
生成字符串。
#include <iostream>
#include <chrono>
#include <random>
#include <algorithm>
int genRandom(std::mt19937 & mt, int ls, int rs)
{
std::uniform_int_distribution<int> distribution(ls, rs);
return distribution(mt);
}
int main()
{
std::mt19937 mt_rand;
auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
mt_rand.seed(static_cast<unsigned>(seed));
std::string randomString(genRandom(mt_rand, 0, 100), ' ');
std::generate(std::begin(randomString), std::end(randomString), [&] () { return '0' + (genRandom(mt_rand, 0, 1)); });
std::cout << randomString << std::endl;
return 0;
}
答案 2 :(得分:1)
如果你将srand()函数除以RAND_MAX,你会得到一个0..1的数字,并且通过转换为整数,你会得到很多情况0(由于截断)。最后0 + 1是1。
也许你需要这样的东西:
rand()%(base)即rand() % (2)
不要忘记初始化随机数生成器:
srand(time(NULL));
答案 3 :(得分:1)
对于0/1问题:
num = rand()%2;
将生成一个简单的0或1的数字。 使用当前表达式,rand()/ RAND_MAX始终<1,除非rand()== RAND_MAX,在这种情况下它等于1。如果rand()== RND_MAX
,添加1几乎总是1或2对于常量结果
即使rand()返回伪随机序列,默认情况下它始终会在程序启动时生成相同的序列。如果您在同一程序中第二次调用它,结果会有所不同,因为您在随机数序列中进行了调整。如果你想第一次调用rand()每个进程运行tu返回不同的结果,你必须调用
public getBlogPosts() : Observable<BlogPost[]> {
return this.http.get(`${ environment.apiUrl }GetBlogPosts`, { headers: this.headers })
.map((response: Response) => <BlogPost[]>response.json());
}
在调用rand()之前
答案 4 :(得分:1)
您可以使用std::bernoulli_distribution
生成布尔值,使用std::uniform_int_distribution
生成整数值。
#include <random>
#include <string>
template <typename Generator>
std::string random_binary_string(Generator& g, std::size_t n) {
std::bernoulli_distribution d;
std::string s;
s.reserve(n);
for (std::size_t i = 0; i < n; ++i) {
s += d(g) ? '1' : '0';
}
return s;
}
template <typename Generator>
std::size_t random_size(Generator& g, std::size_t a, std::size_t b) {
std::uniform_int_distribution<std::size_t> d(a, b);
return d(g);
}
std::random_device
通常会生成非确定性随机数。
#include <iostream>
int main() {
std::random_device g;
std::cout << random_binary_string(g, random_size(g, 1, 100)) << std::endl;
}