给定无重复的字符串,求字符的所有组合
如:”abc”-> a b c ab ac bc abc
使用递归:
void GetAllCombine(char* str,char * begin,char * end)
{
if (str==NULL)
{
return;
}
if (*str=='\0')
{
while (begin!=end)
{
cout << *begin;
begin++;
}
cout << endl;
return;
}
GetAllCombine(str + 1, begin, end);
*end = *str;
end++;
GetAllCombine(str + 1, begin, end);
}
int main()
{
char str[1024];
char result[1024]{1024,'\0'};
gets_s(str);
GetAllCombine(str,result,result);
return 0;
}
不用递归:构造长度为n的数组,每一位使用1表示接受字符串中相同位置的字符;0表示不接受。则原题的要求就是输出”000”~”111”组合对应的字符串。
#include <iostream>
using namespace std;
void GetAllCombine_2(char * str)
{
while (str==NULL||*str=='\0')
{
return;
}
int k = strlen(str);
int n = (1 << k) - 1;//'11...1'
int tmp;
while (n)
{
tmp = n;
for (auto i = 0; i < k;++i)
{
if ((tmp >> i) & 1)
{
cout << str[i];
}
}
cout << endl;
n--;
}
}
int main()
{
char str[1024];
gets_s(str);
GetAllCombine_2(str );
return 0;
}