#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”); 并在每次运行程序时随机生成这些名称。
感谢。
答案 0 :(得分:1)
可以使用std::array
或std::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;
这个代码比试图改组字符串要有效得多,因为它只是移动整个字符串,而不是整个字符串。您还可以单独保存多个“排序”,并让它们都返回相同的数据。