输入[1,2,5,8]
输出:[],[1],[2]...[1,2,5,8]
// 输出数组的全部子集
//用递归
#include <iostream>
#include <string>
using namespace std;
//
string AddForEach(string str,int e){
//用]分割string,为每个[] 中添加e
string str2; //要
bool isBlank =true;//控制[后有没有数字
bool leftBraket=false;//左括号已存在标志
for(int i=0;i<str.length();i++){
if('['==str[i]){
leftBraket=true;
isBlank =true;
}else if(']'==str[i]){
if(isBlank){
str2=str2+to_string(e);
}
else{
str2=str2+','+to_string(e);
}
leftBraket=false;
//isBlank = true;
}else{
if(leftBraket && isBlank) isBlank=false;//左括号已有,紧接着是非右括号的字符,说明不为空。
//str2+=to_string(str[i]);
}
str2+=str[i];
}
return str2;
}
string FindSubSet(int a[],int sizeofA){//找数组的所有子集
if(sizeofA==0){
string s="[]";
cout<<s<<endl;
return s;
}
int t=--sizeofA;
string str=FindSubSet(a,t);
// printf("str:%s\n",str.c_str());
string str2=AddForEach(str,a[t]);
// printf("str2:%s\n",str2.c_str());
// printf("str+ ','+str2:%s",(str+ ","+str2).c_str());
return str+ ","+str2;
}
int main()
{
int a[]={1,2,5,18};
string str=FindSubSet(a,sizeof(a)/sizeof(int));//sizeof会数出字节数
cout << str<< endl;
return 0;
}