// 字符串的排列.cpp : 定义控制台应用程序的入口点。
//
/*************************************************
设计者:cslave
版本说明:本代码免费用于商用,拷贝,转移,使用,但是
有本代码导致的问题,本人概不负责。
设计时间:2012.6.30
分发原则:遵守GNU规范。
**************************************************/
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
void Swap(char& a,char& b)
{
char temp=a;
a=b;
b=temp;
}
void permutation(char* pStr,char* pBegin)
{
if(*pBegin=='\0')
cout<<pStr<<endl;
else
{
for(char *pCh=pBegin;*pCh!='\0';pCh++)
{
Swap(*pBegin,*pCh);
permutation(pStr,pBegin+1);
Swap(*pBegin,*pCh);
}
}
}
void permutation(char* pStr)
{
if(!pStr)
return;
else
permutation(pStr,pStr);
}
void Combination(char* pStr,int Num,int Count ,char* arr)
{
if (Count==Num)
{
cout<<arr<<endl;
return;
}
for(char* pTemp=pStr;*pTemp!='\0';pTemp++)
{
arr[Count++]=*pTemp;
Combination(++pStr,Num,Count,arr);
arr[--Count]='\0';
}
}
void Combination(char* pStr)
{
if(!pStr)
return;
else
{
int Num=strlen(pStr);
char arr[10];
memset(arr,'\0',10);
for(int i=1;i<=Num;i++)
Combination(pStr,i,0,arr);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char pStr[]="abcdefgh";
Combination(pStr);
permutation(pStr);
return 0;
}