shuffle字符串不是整数的代码

时间:2017-03-26 05:20:29

标签: c++ shuffle

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main() {
    int cards[52];
    srand(time(0));

    for ( int i = 0; i < 52; i++ ) {
        cards[i] = i + 1;
    }

    for ( int i = 0; i < 52; i++ ) {
        int index = rand() % 52;
        int tmp = cards[i];
        cards[i] = cards[index];
        cards[index] = tmp;
    }

    for ( int i = 0; i < 52; i++ ) {
        cout << cards[i] << " ";
    }

    cout << endl;
    return 0;
}

大家好,这段代码生成随机数1-52。有没有办法将字符串改为字符串(“nick”,“john”,“mike”); 并在每次运行程序时随机生成这些名称。

感谢。

2 个答案:

答案 0 :(得分:1)

可以使用std::arraystd::vector来存储多个对象,其中第一个是静态大小的,而后者可以动态增长。可以使用std::shuffle

来对一组元素(使用随机迭代器)进行混洗
#include <vector>
#include <string>
#include <iostream>
#include <random>
#include <algorithm>

int main()
{
    std::vector<std::string> v;
    v.push_back("nick");
    v.push_back("john");
    v.push_back("mike");
    std::mt19937_64 gen(std::random_device{}());
    std::shuffle(v.begin(), v.end(), gen);
    for(std::size_t i{}; i < v.size(); ++i) std::cout << v[i] << "\n";
}

答案 1 :(得分:0)

要对字符串进行随机播放,您可以使用与现在完全相同的代码。

您希望能够更改项目数,因此请用向量替换int cards [52]。同时将其重命名为“索引”:

std::vector<int> indexes;

启动程序时调整大小,假设您有一个矢量“名称”:

int main()
{
    int n = names.size();

    indexes.resize(n);

并从零开始编号,而不是从1开始编号:

    for ( int i = 0; i < n; i++ ) {
        indexes[i] = i;

随机播放“n”整理:

for ( int i = 0; i < n; i++ ) {
    int index = rand() % n;
    int tmp = indexes[i];
    indexes[i] = indexes[index];
    indexes[index] = tmp;
}

假设字符串在数组或向量“名称”中,您现在可以使用随机索引循环遍历它们:

for ( int i = 0; i < n; i++ ) {
    cout << names[indexes[i]] << " ";

cout << endl;

这个代码比试图改组字符串要有效得多,因为它只是移动整个字符串,而不是整个字符串。您还可以单独保存多个“排序”,并让它们都返回相同的数据。