//排列函数
void arrangementofstr(char *str,int beg)//str指向待排列的数组,beg为数组的索引位置
{
if (!str)
{
return ;
}
if (str[beg]=='\0')
{
cout<<str<<" ";
return;
}
for (int i=beg;str[i]!='\0';++i)
{
char tmp=str[beg];
str[beg]=str[i];
str[i]=tmp;
arrangementofstr(str,beg+1);
tmp=str[beg];
str[beg]=str[i];
str[i]=tmp;
}
}
//组合函数
void combination(char *pbeg,int n,int j)//pbeg为指向待组合的数组,n为组合数,j为数组索引位置
{
if (!pbeg)
return;
static string tmp;
if (n==0)
{
cout<<tmp<<" ";
return;
}
for (int i=j;i<=strlen(pbeg)-n;++i)//i=j-------------------------!!!!!!!!注意啊啊 啊啊啊
{
tmp.push_back(pbeg[i]);//strlen(pbeg)-n其实不变啦,为窗口大小,窗口向后移动
combination(pbeg+1,n-1,i);
tmp.pop_back();
}
}
void allcombination(char *p)
{
for (int i=1;i<=strlen(p);++i)
{
combination(p,i,0);
cout<<endl;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char a[]="abcde";
arrangementofstr(a,0);
//allcombination(a);
combination1(a,3);
return 0;
}
运行结果: