递归
#include<bits/stdc++.h>
using namespace std;
void combination(string&,int,int,string&);
void solve(string& str,string& res){
if(str.empty()) return;
for(int i=1;i<=str.size();i++) {
combination(str,0,i,res);
}
}
void combination(string&str,int id,int num,string&res){
if(num==0){
for(int i=0;i<res.size();i++) cout<<res[i];
cout<<"\n";
return;
}
if(id>=str.size()) return;
res.push_back(str[id]);
combination(str,id+1,num-1,res);
res.erase(res.end()-1);
combination(str,id+1,num,res);
}
int main(){
string str="abcdefgh";
string res;
solve(str,res);
return(0);
}
非递归
#include<bits/stdc++.h>
using namespace std;
void combination(const string&,int,int,string&);
void solve(const string& str,string& res){
int len=str.size();
for(int i=1;i<(1<<len);i++) {
combination(str,len,i,res);
for(int i=0;i<res.size();i++) cout<<res[i];
cout<<"\n";
res.clear();
}
}
void combination(const string& str,int len,int flag,string& res){
for(int i=0;i<len;i++){
if(flag&(1<<i)) res.push_back(str[i]);
}
}
int main(){
string str="abcdefgh";
string res;
solve(str,res);
return(0);
}