Здравствуйте, коллеги-программисты, мне дали домашнее задание написать код, который принимает строку, введенную пользователем, который затем выбирает, как манипулировать строкой, и в некоторых случаях выводит ее на консоль. У меня есть код, в основном написанный и работающий, но есть пара функций, которые я не понимаю, как писать.
Предполагается, что один из вариантов — взять строку и показать «беспорядочную версию» строки без ее фактического изменения. (например, «Hello World!» становится «oleWrl! odlH» или любым другим случайным изменением каждый раз, когда выбирается опция.)
Это функция у меня сейчас и была не принят моим профессором, потому что он изменяет саму оригинальную строку.
std::string jumbleString(string str2) { //jumble
string str = str2;
random_shuffle(str.begin(), str.end());
return str;
}
Какой альтернативный способ я могу перемешать / перетасовать и напечатать строку, чтобы получить те же результаты?
редактировать: добавлен актуальный вопрос
Я прошу прощения за любые нарушения форматирования, это мой первый пост здесь. Спасибо за любую помощь. 🙂 Это задание сводит меня с ума.
Ну, вам нужно сопоставить каждого персонажа с новой позицией … поэтому сопоставьте каждую исходную позицию с новой позицией:
using size_type = std::string::size_type;
std::vector<size_type> pos(str2.length());
size_type n = 0;
std::generate(begin(pos), end(pos), [&]{ return n++; });
std::shuffle(begin(pos), end(pos), std::rand);
for (auto i : pos)
std::cout << str2[i];
Других решений пока нет …