您的位置:首页 > 其它

字符串的所有可能组合输出

2013-06-28 10:45 183 查看
分递归法实现和比特位法实现

// 字符的所有组合.cpp : 定义控制台应用程序的入口点。
//程序猴6.28

#include "stdafx.h"
#include <vector>
using namespace std;
void Comb(char* pStr,int num,vector<char> &result);
void Combination(char* pStr)
{
if (!pStr)
return;
vector<char> result;
int i,length = strlen(pStr);
for (i=1;i<=length;i++)
Comb(pStr,i,result);
}

void Comb(char* pStr,int num,vector<char> &result)
{
if (!pStr)
return;
if (num == 0)
{
static int sf = 1;
printf("第%d个组合\n",sf++);
vector<char>::iterator iBegin = result.begin();
for (;iBegin!=result.end();iBegin++)
{
printf("%c",*iBegin);
}
printf("\n");
return;
}
if (*pStr=='\0')
return;
result.push_back(*pStr);//本字符若被纳入结果中,则下一步从下一个字符开始获取num-1个字符
Comb(pStr+1,num-1,result);
result.pop_back();      //本字符若未被纳入结果中,则下一步从下一个字符开始获取num个字符
Comb(pStr+1,num,result);
}

void Comb_Bit(char* pStr,int Bit,int length)
{
if (!pStr)
return;
vector<char> result;
int j;
int FF=0;
for(j=0;j<length;j++)
{
if ((1<<j)&Bit)
{
result.push_back(*(pStr+FF));
}
FF++;
}
vector<char>::iterator Iter=result.begin();
static int sf = 1;
printf("第%d个组合\n",sf++);
for (;Iter!=result.end();Iter++)
{
printf("%c",*Iter);
}
printf("\n");
}

int _tmain(int argc, _TCHAR* argv[])
{
char A[] = "123";
printf("递归法实现:\n");
Combination(A);
printf("\n");
printf("比特位法实现:\n");
int length = strlen(A);
for (int i=1;i<(1<<length);i++)
{
//从第1位~第1<<length-1位中所有的比特位为0或1,为1的位置入结果,为0的位不置入结果
Comb_Bit(A,i,length);
}

return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐