Um die Zeichen der Zeichenfolge st
zu mischen, verwende ich std::shuffle
und einen Zufallsgenerator, der von einem bekannten Samen gefüttert wird. Dies ist Teil eines Encoders, der der Einfachheit halber nur die Eingabe mischt.dishuffle ein Array von int/char
Die gemischten Daten werden an einen Decoder gesendet. Auf dieser Seite haben wir keinen Zugriff auf die ursprüngliche Eingabe, sondern auf die gemischte Eingabe.
Wie kann ich deshuffle die Zeichenfolge shuffledSt
, den gleichen Zufallszahlengenerator und das gleiche Saatgut verwenden, bis ich st
die ursprüngliche Zeichenfolge erhalten kann?
#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;
}
'const Auto saved_st (st);' nicht für Sie arbeiten? –
"Unshuffle"? Meinst du "sortieren", oder meinst du "magisch die ursprüngliche Schnur wiederherstellen, egal wie es aussah"? Oder ist das eigentliche Problem, dass Sie wirklich eine gemischte _copy_ von "st" wollen, anstatt es zu ändern? – You
'default_random_engine' ist die Implementierung definiert, Sie können dies also nicht portabel machen. ** Wenn ** Sie wüssten, welche Art von Zufalls-Engine es verwendet, und wenn es invertierbar wäre (zum Beispiel ein linearer kongruenter Generator), könnten Sie ein "Unshuffle" implementieren, aber Sie müssen auch die Implementierung von 'std kennen :: shuffle ", um zu versuchen, diesen Prozess ebenfalls zu invertieren. Lange Rede, kurzer Sinn, wahrscheinlich nicht möglich. – CoryKramer