我搜索并找到了一些随机数字,但我认为它不适用于字符串......例如,我在数组中有一个这样的列表:
string restaurants[] = {"Texas Roadhouse,","On The Border,","Olive Garden,","Panda Express,","Cracker Barrel,","IHOP,","Panda Express,","Pei Wei"};
我将如何随机化它或只是将它们全部交换并将它们混杂在一起?
如果没有必要,不要重新发明轮子。
std::random_shuffle(std::begin(restaurants), std::end(restaurants));
在 C++03 中,无需实现您自己的begin
and end
:
std::random_shuffle(restaurants, restaurants + sizeof restaurants / sizeof restaurants[0]);
请注意,除非您使用诸如 之类的东西,否则std::vector
将其传递给函数而不是通过引用来执行此操作将需要将后者与额外的大小参数一起使用。
你可以这样做
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
using namespace std;
int main ()
{
static string numbers[] = {"Texas Roadhouse,","On The Border,","Olive Garden,","Panda Express,","Cracker Barrel,","IHOP,","Panda Express,","Pei Wei"};
srand(time(0));
int rand_index = rand() % 10;
cout << numbers[rand_index] << endl;
string input;
getline(cin,input);
cout << (((input=="even")==(rand_index+1)%2==0) ? "Right." : "Wrong.") << endl;
}
只是一个有趣的选择(随机排序):
std::sort(restaurants, restaurants + sizeof(restaurants) / sizeof(std::string), [](int x, int y) -> bool { return rand() % 100 >= 50; });