/*输入一个字符串,打印出该字符串中字符的所有排列*/
#include <iostream>
#include <stdio.h>
using namespace std;
void PermutationS2(char* pStr, char* pBegin)
{
if(*pBegin == '\0')
cout << pStr<<'\t';
else
{
char *pTemp = pBegin;
while(*pTemp != '\0')
{
swap(*pTemp,*pBegin);
PermutationS2(pStr,pBegin+1);
swap(*pTemp,*pBegin);
pTemp ++;
}
}
}
void PermutationS1(char *pStr, int begin, int end)
{
if(end - begin == 1)
cout << pStr<<'\t';
else{
for(int i = begin; i < end; i++)
{
swap(pStr[begin],pStr[i]);
PermutationS1(pStr, begin+1,end);
swap(pStr[begin],pStr[i]);
}
}
}
void swap(char& a, char& b)
{
char temp = b;
b = a;
a = temp;
}
void Permutation(char *pStr)
{
if(pStr == NULL)
return;
/*int index = 0;
while(pStr[index]!='\0')
index++;*/
cout << "Solution1: ";
PermutationS1(pStr, 0, strlen(pStr));
cout <<endl << "Solution2: ";
PermutationS2(pStr, pStr);
}
void Test(char* str)
{
if(str == NULL)
cout << "Test for NULL begins";
else
cout << "Test for " << str <<endl;
Permutation(str);
cout<<endl;
}
int main()
{
Test(NULL);
char str1[] = "";
Test(str1);
char str2[] = "a";
Test(str2);
char str3[] = "ab";
Test(str3);
char str4[] = "abc";
Test(str4);
system("PAUSE");
return 0;
}
运行结果如下: