Ok, lo scopo del programma l'ho capito, il codice che hai postato non molto invece!
Ho provato anche io ad implementare qualcosa, ti posto il codice:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
void anagrammi(const string &lettere, const vector<unsigned int> &v, vector<string> &parole)
{
string s;
for(unsigned int i = 0; i < v.size(); ++i)
{
s.push_back(lettere[v[i]]);
}
do
{
parole.push_back(s);
}
while(next_permutation(s.begin(), s.end()));
}
void combinazioni(string lettere, vector<string> &parole)
{
vector<unsigned int> v;
unsigned int i;
unsigned int j;
bool flag;
sort(lettere.begin(), lettere.end());
for(unsigned int k = lettere.size(); k > 1; --k)
{
v.resize(0);
i = k - 1;
flag = true;
for(j = 0; j < k; ++j)
{
v.push_back(j);
}
while(true)
{
if(flag)
{
anagrammi(lettere, v, parole);
flag = false;
}
if(v[i] < i + lettere.size() - k)
{
++v[i];
flag = true;
if(i != k - 1 && v[i] != v[i + 1] - 1)
{
for(j = i + 1; j < k; ++j)
{
v[j] = v[j - 1] + 1;
}
i = k - 1;
}
}
else
{
if(i)
{
--i;
}
else
{
break;
}
}
}
}
}
int main()
{
string lettere = "cane";
vector<string> parole;
combinazioni(lettere, parole);
for(unsigned int i = 0; i < parole.size(); ++i)
{
cout << parole[i] << endl;
}
}
Sembra funzionare, magari provalo e fammi sapere.