-2
爲了洗牌字符串st
的字符,我使用了std::shuffle
和一個隨機數生成器,它由已知的種子提供。這是一個編碼器的一部分,爲簡單起見,只需對輸入進行混洗。deshuffle int/char的數組
混洗的數據將被髮送到解碼器。在那一邊,我們沒有訪問原始輸入,但洗牌。
我怎麼能洗還原的串shuffledSt
,使用相同的隨機數發生器和相同的種子,直到我能獲得原始字符串st
?
#include <random>
#include <algorithm>
int main (int argc, char* argv[])
{
std::string st = "asdfgh";
int seed = 1000;
std::shuffle(st.begin(), st.end(), std::default_random_engine(seed));
std::cerr << st << '\n';
std::string shuffledSt = st;
return 0;
}
'常量自動saved_st(ST);'不爲你工作? –
「鬆脫」?你的意思是「排序」,還是你的意思是「神奇地恢復原始字符串,不管它看起來像什麼」?或者是你真的想要一個洗牌的'st'拷貝而不是修改它的實際問題? – You
'default_random_engine'是實現定義的,所以你不能這麼做。 **如果**你知道它使用的是哪種類型的隨機引擎,並且它是否是可逆的(例如線性一致的生成器),那麼你可以實現一個「解除衝突」,但是你還需要知道'std :: shuffle'也試圖反轉這個過程。所以長話短說,可能不可能。 – CoryKramer