题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba,用递归。
#include <cstdio>
void Permutation(char* pStr, char* pBegin);
void Permutation(char* pStr)
{
//判断输入是否合法
if (pStr == nullptr)
return;
Permutation(pStr, pStr);
}
//pStr指向字符串首字符(固定不变),pBegin指向执行操作的字符串的第一个字符
void Permutation(char* pStr, char* pBegin)
{
//当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;
}
}
}
int main()
{
char string1[] = "abc";
Permutation(string1);
printf("\n");
char string2[] = "ab";
Permutation(string2);
printf("\n");
char string3[] = "a";
Permutation(string3);
printf("\n");
char string4[] = "";
Permutation(string4);
printf("\n");
return 0;
}