#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
void num3()
{
printf("数组num[3]={1,2,3}的全排列\n");
int num[3]={1,2,3};
do
{
cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
}while(next_permutation(num,num+3));
printf("把while(next_permutation(num,num+3))中的3改为2时\n");
num[0]=1;num[1]=2;num[2]=3;
do
{
cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
}while(next_permutation(num,num+2));
printf("数组num初始化为2,3,1\n");
num[0]=2;num[1]=3;num[2]=1;
do
{
cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
}while(next_permutation(num,num+3));
printf("此外,next_permutation(node,node+n,cmp)可以对结构体num按照自定义的排序方式cmp进行排序。\n");
}
void char_strlen()
{
printf("\n字符数组的全排列\n输入一个字符数组:");
char ch[205];cin >> ch;
sort(ch, ch + strlen(ch) );
//该语句对输入的数组进行字典升序排序。如输入9874563102 cout<<ch; 将输出0123456789,这样就能输出全排列了
char *first = ch;char *last = ch + strlen(ch);
do {
cout<< ch << endl;
}while(next_permutation(first, last));
//这样就不必事先知道ch的大小了,是把整个ch字符串全都进行排序
//若采用 while(next_permutation(ch,ch+5)); 如果只输入1562,就会产生错误,因为ch中第五个元素指向未知
//若要整个字符串进行排序,参数5指的是数组的长度,不含结束符
}
void str()//从当前输入位置开始
{
printf("\n字符串当前输入位置开始的全排列\n输入一个字符串:");
string line;cin>>line;
do {
cout<<line<<endl;
}while(next_permutation(line.begin(),line.end()));
}
void allstr()//全排列
{
printf("\n字符串的全排列\n输入一个字符串:");
string line;cin>>line;
sort(line.begin(),line.end());
cout<<line<<endl;
do {
cout<<line<<endl;
}while(next_permutation(line.begin(),line.end()));
}
int main(){
num3();
char_strlen();
str();
allstr();
return 0;
}