String unshuffler возвращает разные результаты в Windows и LinuxC++

Программы на C++. Форум разработчиков
Anonymous
String unshuffler возвращает разные результаты в Windows и Linux

Сообщение Anonymous »

Я работаю над проектом, который требует перетасовки строки, а затем перетасовки этой строки позже.
В настоящее время я перетасовываю строку на машине с Linux и пытаюсь перетасовать строку на машине с Windows. Первоначально я тестировал перетасовку на Linux и он вернулся нормально, но когда я попробовал тот же код в Windows, он вернул что-то совершенно другое и неправильное.
Вот функция, которая перетасовывает.
#include
#include
#include
#include
#include
#include

std::string shuffleString(const std::string& str, unsigned int seed) {
std::string shuffled = str;
std::vector indices(str.size());
std::iota(indices.begin(), indices.end(), 0); // Fill indices with 0, 1, ..., n-1
std::shuffle(indices.begin(), indices.end(), std::default_random_engine(seed));

for (size_t i = 0; i < str.size(); ++i) {
shuffled = str[indices];
}

return shuffled;
}

Вот функция, которая восстанавливает порядок (она одинакова как для Windows, так и для Linux)
#include
#include
#include
#include
#include
#include

std::string unshuffleString(const std::string& shuffled, unsigned int seed) {
std::string unshuffled(shuffled.size(), ' ');
std::vector indices(shuffled.size());
std::iota(indices.begin(), indices.end(), 0); // Fill indices with 0, 1, ..., n-1

std::mt19937 rng(seed);
std::shuffle(indices.begin(), indices.end(), rng);

for (size_t i = 0; i < shuffled.size(); ++i) {
unshuffled[indices] = shuffled;
}

return unshuffled;
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... -and-linux

Вернуться в «C++»