Игнорирование доступности std :: next_permutation, потому что ваш комментарий к предыдущему ответу ...
Если вы хотите сгенерировать все уникальные перестановки, в какой-то момент вам понадобится привести их в порядок. Самый хакерский способ сделать это - поместить их все в вектор, отсортировать и затем подавить дубликаты смежных записей при распечатке. Но это намного медленнее, чем нужно.
Вам нужно начать с сортировки вашей строки, чтобы идентичные перестановки генерировались друг за другом. Затем в цикле for убедитесь, что вы пропускаете любые повторяющиеся буквы в «rest». что-то вроде:
char lastAdditionToPrefix = '\0';
for (int i = 0; i < rest.length(); i++)
{
if (rest[i] == lastAdditionToPrefix) continue;
lastAdditionToPrefix = rest[i];
cout << endl<< "prefix: " << prefix << " | rest: " << rest << endl;
...
Я не уверен, что это изменение полностью исправит ваш код, но оно ближе, чем вы в данный момент. edit: это, плюс сортировка ввода в main (), будет работать