题目:输入一个字符串 打印出该字符串中字符的所有排列 例如输入字符串abc 则打印出由字符a、b、c所能排列出来的所有字符串
打印abc 所有排列组合
可以将第一位看做为a.然后分别于剩余的两位b、c进行交换
得到bac bca
接着对只有两位的字符串进行交换 将第一位于剩余的位进行交换
因此 递归的将第一位与其余位进行交换
#include <iostream>
#include <string>
using namespace std;
void swaps(char &a,char &b)
{
char t;
t=a;
a=b;
b=t;
}
void print(char *s,char *begin)
{
if(*begin=='\0')
cout<<s<<endl;
else
{
for(char *p=begin;*p!='\0';p++)
{
swaps(*p,*begin);
print(s,begin+1);
swaps(*p,*begin);
}
}
}
void listorder(char *s)
{
if(s==NULL)
return ;
print(s,s);
}
int main()
{
char *s=new char[100];
cin.getline(s,100);
listorder(s);
return 0;
}