Манипуляция строк — переполнение стека беспорядочных строк

Здравствуйте, коллеги-программисты, мне дали домашнее задание написать код, который принимает строку, введенную пользователем, который затем выбирает, как манипулировать строкой, и в некоторых случаях выводит ее на консоль. У меня есть код, в основном написанный и работающий, но есть пара функций, которые я не понимаю, как писать.

Предполагается, что один из вариантов — взять строку и показать «беспорядочную версию» строки без ее фактического изменения. (например, «Hello World!» становится «oleWrl! odlH» или любым другим случайным изменением каждый раз, когда выбирается опция.)

Это функция у меня сейчас и была не принят моим профессором, потому что он изменяет саму оригинальную строку.

std::string jumbleString(string str2) { //jumble
string str = str2;
random_shuffle(str.begin(), str.end());

return str;
}

Какой альтернативный способ я могу перемешать / перетасовать и напечатать строку, чтобы получить те же результаты?

редактировать: добавлен актуальный вопрос

Я прошу прощения за любые нарушения форматирования, это мой первый пост здесь. Спасибо за любую помощь. 🙂 Это задание сводит меня с ума.

0

Решение

Ну, вам нужно сопоставить каждого персонажа с новой позицией … поэтому сопоставьте каждую исходную позицию с новой позицией:

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];
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector