2016-11-14 80 views
1

我正在创建一个小游戏,其中用户将有提示(字符串的字符)来猜测字符串的字。我有代码来查看字符串的每个单独的字符,但是有可能我可以随机打印出这些字符?随机打印每个字符

string str("TEST"); 
for (int i = 0; i < str.size(); i++){ 
cout <<" "<< str[i]; 

输出:TEST 所需输出样本:对字符串ETST

+4

你检查过'std :: shuffle'吗? – Arunmu

+1

您可能想检查一下您的洗牌是否比交换第一个和最后一个“T”更多。换句话说,洗牌直到你的洗牌单词与输入不同。 – MSalters

回答

2

使用random_shuffle

random_shuffle(str.begin(), str.end()); 

编辑: C++ 11起使用:

auto engine = std::default_random_engine{}; 
shuffle (begin(str), end(str), engine); 
+1

'random_shuffle'已从C++ 14弃用,并将从C++ 17老兄 – Danh

+0

中删除哦感谢@Danh的信息。 –

+0

正确的想法,虽然。 – user4581301

0

使用以下代码随机生成字母。

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”。如果你的字符串可能包含数字,你可以使用不同的字符进行比较