比如:“abc”字符串的组合为:a,b,c,ab,ac,bc,abc。
这里我用两种方法实现:
位操作:
#include<iostream>
#include<vector>
using namespace std;
//位操作算法
void main()
{
char* data="abcd";
int length=strlen(data);
int last=(1<<length)-1;
cout<<last<<endl;
int i;
for(i=1;i<=last;i++)
{
int currentIndex=length-1;
while(currentIndex>=0)
{
if(i&(1<<currentIndex))
{
cout<<data[length-currentIndex-1];
}
--currentIndex;
}
cout<<endl;
}
}
递归操作:
void algorithm(char* data,int num,vector<char>& result)
{
if(!num)
{
vector<char>::iterator it=result.begin();
for(it;it!=result.end();++it)
{
cout<<*it;
}
cout<<endl;
return;
}
if(*data=='\0')
return;
result.push_back(*data);
algorithm(data+1,num-1,result);
result.pop_back();
algorithm(data+1,num,result);
}
void main()
{
char* data="abcd";
int length=strlen(data);
vector<char> result;
int i;
for(i=1;i<=length;i++)
{
algorithm(data,i,result);
}
}