2016-11-14 73 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」。如果你的字符串可能包含數字,你可以使用不同的字符進行比較