prev_permutation(arr, arr+ size) 字典序递减 //有下一个返回1,没有下一个返0
next_permutation (arr, arr+ size ) 字典序递增
next_permutation(node,node+n,cmp)可以对结构体num按照自定义的排序方式cmp进行排序。
#include<cstdio> //aAb
#include<iostream>//Aab Aba aAb abA bAa baA
#include<algorithm>
#include<string>
#include<vector>
using namespace std; //'A'<'a'<'B'<'b'<...<'Z'<'z'.
int cmp(char a, char b) //自定义函数,实现字母大写排在小写前面的功能
{
if (tolower(a) != tolower(b)) //tolower是将大写转化为小写,A-Z 65-90 a-z 97-122
return tolower(a) < tolower(b);
else
return a < b;
}
int main()
{
int n;
cin >> n;
string s="";
while (n--)
{
cin >> s;
int len = s.size();
sort(s.begin(), s.end(), cmp);
do
{
cout << s << endl;
} while (next_permutation(s.begin(), s.end(), cmp)); //自定义函数的使用
}
system("pause");
return 0;
}
char *first = ch;
char *last = ch + strlen(ch);
do {
cout<< ch << endl;
}while(next_permutation(first, last));
return 0;
}
//这样就不必事先知道ch的大小了,是把整个ch字符串全都进行排序
//若采用 while(next_permutation(ch,ch+5)); 如果只输入1562,就会产生错误,因为ch中第五个元素指向未知
//若要整个字符串进行排序,参数5指的是数组的长度,不含结束符