输入一个字符串,打印出该字符串的所有可能:比如输入abc,那么打印abc,acb,bac,bca,cab,cba.
思路:
1.将字符串分为两部分,一部分是字符串的第一个字符,另一部分是第一个字符以后的所有的字符。
2.拿第一个字符和它后面的字符逐个进行交换。
#include <iostream>
#include <cstdlib>
using namespace std;
void Permutation(char* pStr, char* pBegin);
void Permutation(char* pStr)
{
if (pStr == NULL)
return;
Permutation(pStr, pStr);
}
void Permutation(char* pStr, char* pBegin)
{
if (*pBegin == '\0')
{
printf("%s\n", pStr);
}
else
{
for (char* pCh = pBegin; *pCh != '\0'; ++pCh)
{
char temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
Permutation(pStr, pBegin + 1);
temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
}
}
}
// ====================测试代码====================
void Test(char* pStr)
{
if (pStr == NULL)
printf("Test for NULL begins:\n");
else
printf("Test for %s begins:\n", pStr);
Permutation(pStr);
printf("\n");
}
void main()
{
Test(NULL);
char string1[] = "";
Test(string1);
char string2[] = "a";
Test(string2);
char string3[] = "ab";
Test(string3);
char string4[] = "abc";
Test(string4);
system("pause");
}