我正在創建一個小遊戲,其中用戶將有提示(字符串的字符)來猜測字符串的字。我有代碼來查看字符串的每個單獨的字符,但是有可能我可以隨機打印出這些字符?隨機打印每個字符
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