交错随机数

时间:2014-03-11 22:04:06

标签: random objective-c++ c++03

我想将随机数与一些字母数字字符交错,例如:HELLO与随机数25635→H2E5L6L3O5混合。我知道%1d控制间距,虽然我不确定如何在随机数之间交错文本或如何实现这一点。

代码:

int main(void) {
    int i;

    srand(time(NULL));
    for (i = 1; i <= 10; i++) {

        printf("%1d", 0 + (rand() % 10)); 

        if (i % 5 == 0) {
            printf("\n");
        }
    }
    return 0;
}
顺便说一下 - 如果我的随机数生成器不是很好,我可以接受建议 - 谢谢

1 个答案:

答案 0 :(得分:5)

如果您对使用C ++ 11感到满意,可以使用以下内容:

#include <iostream>
#include <random>
#include <string>

int main() {
    std::random_device rd;
    std::default_random_engine e1(rd());
    std::uniform_int_distribution<int> uniform_dist(0, 9);

    std::string word = "HELLO";
    for (auto ch : word) {
        std::cout << ch << uniform_dist(e1);
    }
    std::cout << '\n';
}

......产生例如:

H3E6L6L1O5

如果您使用较旧的编译器,可以使用标准C库中的randsrand作为随机数:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

int main() {
    std::srand(std::time(NULL));

    std::string word = "HELLO";
    for (int i = 0; i < word.size(); ++i) {
        std::cout << word[i] << (rand() % 10);
    }
    std::cout << '\n';
}