生成随机长度的随机数字串

时间:2017-08-17 08:32:50

标签: c++ string random

我正在尝试为我的程序自动化测试用例,我想生成随机字符串来测试...首先测试将使用基数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;

思想?

5 个答案:

答案 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;
}