我正在创建一个小游戏,其中用户将有提示(字符串的字符)来猜测字符串的字。我有代码来查看字符串的每个单独的字符,但是有可能我可以随机打印出这些字符?随机打印每个字符
string str("TEST");
for (int i = 0; i < str.size(); i++){
cout <<" "<< str[i];
输出:TEST 所需输出样本:对字符串ETST
我正在创建一个小游戏,其中用户将有提示(字符串的字符)来猜测字符串的字。我有代码来查看字符串的每个单独的字符,但是有可能我可以随机打印出这些字符?随机打印每个字符
string str("TEST");
for (int i = 0; i < str.size(); i++){
cout <<" "<< str[i];
输出:TEST 所需输出样本:对字符串ETST
random_shuffle(str.begin(), str.end());
编辑: C++ 11起使用:
auto engine = std::default_random_engine{};
shuffle (begin(str), end(str), engine);
使用以下代码随机生成字母。
const int stl = str.size();
int stl2 = stl;
while (stl2 >= 0)
{
int r = rand() % stl;
if (str[r] != '0')
{
cout<<" "<<str[r];
str[r] = '0';
stl2--;
}
}
此代码基本上基于所述字符串的大小的随机数,然后打印放置在字符串的特定位置处的字符。 为了避免重印已经打印的字符,我将打印的字符转换为“0”,所以下次生成相同的位置编号时,它会检查字符是否为“0”。
如果您需要保留原始字符串,那么您可以将字符串复制到另一个变量并在代码中使用它。
注意:假定字符串将只包含字母字符,以防止重复,使用“0”。如果你的字符串可能包含数字,你可以使用不同的字符进行比较
你检查过'std :: shuffle'吗? – Arunmu
您可能想检查一下您的洗牌是否比交换第一个和最后一个“T”更多。换句话说,洗牌直到你的洗牌单词与输入不同。 – MSalters