1.输入一个字符串,打印出该字符串中字符的所有排列,例如输入字符串abc,则打印出字符a,b,c的所有可能排列,abc,acb,bac,bca,cab,cba.
结果:
分析:我们可以讲字符串看成两部分组成,第一部分为第一个字符,第二部分是后面所有的字符。首先求所有可能出现在第一位置的字符,即把第一个字符和后面所有的字符交换。确定了第一个字符之后可以,可以将第一个字符之后的那些字符按照前面的做法,一次交换,可以看出,这是一个递归的过程。
源码:
/**
* 功能说明:Description
* 作者:K0713
* 日期:2016-7-21
**/
#include<iostream>
using namespace std;
void Permutation(char* pStr, char* pBegin)
{
if (pStr == NULL || pBegin == NULL)
{
return;
}
if (*pBegin == '\0')
printf("%s\n", pStr);
else
{
for (char* pCh = pBegin; *pCh != '\0'; pCh++)
{
swap(*pBegin, *pCh);
Permutation(pStr, pBegin + 1);
swap(*pBegin, *pCh);
}
}
}
int main(void)
{
char str[] = "abc";
Permutation(str, str);
system("PAUSE");
return 0;
}
结果: